Go 之基礎速學 (十) golang 裡介面的實現

huxiaobai_001發表於2020-05-07

介面,大家都熟悉,php、java當中都有這麼個概念,interface關鍵詞,golang裡面也是如此!
但是golang裡面介面的實現和php當中還是有區別的,原理性質都一樣,只不過寫法不同罷了!
下邊我們來介紹一下如何實現介面?

直接上程式碼吧:

//IService.go檔案:
package services
//就這麼簡單 宣告介面 interface
type IService interface {
   //定義要實現的方法  Get(id int) string  必須傳參為int型別  返回值為string型別 實現了該介面的結構體必須要實現裡面的方法
   Get(id int) string
}
//IServiceOne.go檔案:
package services
type IServiceOne struct {
}
//結構體當中實現Get(id int) stirng方法
func (one IServiceOne) Get(id int) string {
   return "單挑新聞內容one"
}
//IServiceTwo.go檔案
package services
type IServiceTwo struct {
}
//結構體當中實現Get(id int) stirng方法
func (two IServiceTwo) Get(id int) string {
   return "單挑新聞內容two";
}

看完上邊的程式碼是不是懵逼了啊?第一個檔案是介面檔案第二個第三個檔案是實現了介面裡面的方法Get(id int) string 但是三者的聯絡是什麼呢?也沒看到第二個和第三個檔案去實現介面啊?如何去用呢?
這麼用,看程式碼和註釋:

package main
import (
   "com.huxiaobai/services"
   "fmt"
   "github.com/pquerna/ffjson/ffjson"
)
func main(){
    //介面的實現 案例一
    //介面更多的要理解為一種規範,必須實現介面裡面的方法,起到規範化的作用,除此也沒啥別的作用,和php一樣!
    var service services.IService = services.IServiceOne{}
    //如果 func (one *IServiceOne) Get(id int) string {}  結構體裡面的方法要求傳入的是指標 那麼我們這裡呼叫的時候也需要傳入指標  這也是我們所提倡的寫法 因為這樣可以改變結構體裡面的值並且可以同步 上邊的寫法是重新塞入了一個物件無法同步屬性值
    //var service services.IService = new(services.IServiceOne)
    //或者寫成如下所示也是一樣的
    //var service services.IService = &services.IServiceOne
    fmt.Println(service.Get(12))
}
本作品採用《CC 協議》,轉載必須註明作者和本文連結

胡軍

相關文章