1.結構體
在golang裡,沒有類的概念,但是如果非要實現像類那樣的例子,那或許就是結構體了,結構體是一系列變數的集合,
定義
type s_name struct
宣告結構體型別的變數
var name = s_name
//或者
var name = s_name
可是這跟模擬,還少類方法啊,的確,不過golang也能給結構體加上方法。
2.方法
golang裡,方法就是帶有接收者的函式,何為接收者,即是任意型別(結構體,指標,介面等)的例項。函式跟型別繫結,即成了方法
定義
type person struct
//此處person型別的person是sayhello方法的接收者,以後person可以呼叫此方法。
func (person person) sayhello
person.sayhello()
//結構體在定義的時候,並沒有定義方法,但是通過上面的操作,就好像是該方法是結構體自己定義的一樣。有點反客為主的意思。
把圖內文字換一下就是
方法:你有方法嘛?結構體
結構體:沒有
func (s struct) func {}
方法:那從現在起,你已經有了
當然方法不只是能繫結在結構體上,還能有很多態別。
3.介面
duck typing:假如,我認為黃色的,長的像鴨子的動物都算是鴨子,那麼以後,只要是黃色的,長的像鴨子的東西,無論有沒有生命,大小如何,他在我的範疇裡都是鴨子。
duck typing 描述事物的外部行為而非內部結構,為多型的一種形式。是從使用者的角度來看的。如果我認為長得像鴨子的東西是鴨子,那麼任何長的像鴨子的事物在我眼中就是鴨子
介面是一組方法簽名的集合,體現的是泛型的思想。
介面是隱式實現的,只要實現了介面裡的方法,就相當於實現了介面,即只要長的像鴨子,那麼就是鴨子。
type if_name inte***ce
type s1 struct {}
func (s1 s1) method1() {}
func (s1 s1) method2() {}
s1實現了method1(),method2()方法,那麼也就意味著s1實現了if_name這個介面,那麼以後if_name就可以視為s1型別,反之亦然,如果多個型別都實現了兩個方法,那麼多個型別都可視為if_name型別,那麼if_name就可以當做很多態別使用,這也許能稱之為泛型吧。那麼定義這樣乙個介面型別的陣列,即可以裝下各種實現了介面所有方法 的不同型別了。 Go學習筆記 結構體 方法 介面
go 語言中沒有 類 的概念,也不支援像繼承這種物件導向的概念。但是go 語言的結構體與 類 都是復合結構體,而且go 語言中結構體的組合方式比物件導向具有更高的擴充套件性和靈活性。7.1.1 結構體定義 結構體一般定義如下 type identifier struct 例如我們想宣告乙個學生的結構...
7 結構體 方法 介面
7.2 方法 7.3 介面 go 語言中沒有 類 的概念,也不支援像繼承這種物件導向的概念。但是go 語言的結構體與 類 都是復合結構體,而且go 語言中結構體的組合方式比物件導向具有更高的擴充套件性和靈活性。結構體一般定義如下 type identifier struct 例如我們想宣告乙個學生的...
Go 結構體 方法 介面
go 語言中沒有 類 的概念,也不支援像繼承這種物件導向的概念。但是go 語言的結構體與 類 都是復合結構體,而且go 語言中結構體的組合方式比物件導向具有更高的擴充套件性和靈活性。7.1.1 結構體定義 結構體一般定義如下 type identifier struct 例如我們想宣告乙個學生的結構...