介面,大家都熟悉,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 協議》,轉載必須註明作者和本文連結