1,介面實現機制:只要目標方法集內包含介面宣告的全部方法,就被視為實現了該介面,無需做顯示宣告。目標型別可以實現多個介面。
2,內部實現,介面自身也是一種結構型別
type iface struct
不能有欄位
不能定義自己的方法。
只能宣告方法,不能實現。
可嵌入其它介面型別。
3,介面通常以er作為介面字尾,方法名是宣告組成部分,但引數名可不同或省略
type tester inte***ce
type data struct {}
func(*data) test(){}
func(data) string() string
func main()
4,如果介面沒有任何方法,那麼就是個空介面(inte***ce{}),它的用途類似物件導向裡的跟型別object,可被賦值為任何型別的物件
5,可以像匿名字段那樣,嵌入其它介面。目標型別方法集中必須擁有包含嵌入介面方法在內的全部方法,才算實現了該介面
type stringer inte***ce
type tester inte***ce
type data struct {}
func (*data) test() {}
func (data) string() string
func main()
6,超級介面變數可以隱式轉換為子集,反過來不行
func pp(a stringer)
func main()
7,支援匿名介面型別,可直接用於變數定義,或作為結構字段型別
package main
import "fmt"
type data struct {}
func (data) string() string
type node struct
}func main() = data{}
n := node
fmt.println(n.data.string())
}
Go語言學習筆記(七)介面
go語言中的介面作用類似於c 中的虛函式機制,可以提供乙個統一呼叫的方式。介面是雙方約定的一種合作協議。介面實現者不需要關心介面會被怎樣使用,呼叫者也不需要關心介面的實現細節。介面是一種型別,也是一種抽象結構,不會暴露所包含資料的格式 型別及結構。每個介面型別由多個方法組成。type 介面型別名 i...
Go語言學習筆記 PART9 介面
go語言不是傳統的物件導向程式設計語言,沒有類和繼承的概念,但是有非常靈活的介面,可以實現物件導向的特徵,介面提供一種方式來說明物件的行為 type namer inte ce 複製 1.定義乙個介面 type shaper inte ce type square struct 2.square型別...
go 型別 摘自go語言學習筆記
從計算機實現角度來看,變數是一段或多段用來儲存資料的記憶體 go變數總是有固定的資料型別,型別決定了變數記憶體的長度和儲存格式 通過型別轉換或指標操作,我們可用不同方式修改變數值,但這並不意味著改變了變數型別 因為記憶體分配發生在執行期,所以在編碼階段我們用乙個易於閱讀的名字來表示這段記憶體。實際上...