匿名字段:只提供型別,不寫欄位名
所有的內建型別和自定義型別都是可以作為匿名欄位去使用。
介面:定義物件的行為規範,,規範的細節由具體的物件實現。
介面是乙個或多個方法簽名的集合。
任何型別的方法集中只要擁有該介面'對應的全部方法'簽名。
就表示它 "實現" 了該介面,無須在該型別上顯式宣告實現了哪個介面。
這稱為structural typing。
所謂對應方法,是指有相同名稱、引數列表 (不包括引數名) 以及返回值。
當然,該型別還可以有其他方法。
介面只有方法宣告,沒有實現,沒有資料字段。
介面可以匿名嵌入其他介面,或嵌入到結構中。
物件賦值給介面時,會發生拷貝,而介面內部儲存的是指向這個複製品的指標,既無法修改複製品的狀態,也無法獲取指標。
只有當介面儲存的型別和物件都為nil時,介面才等於nil。
介面呼叫不會做receiver的自動轉換。
介面同樣支援匿名字段方法。
介面也可實現類似oop中的多型。
空介面可以作為任何型別資料的容器。
乙個型別可實現多個介面。
介面命名習慣以 er 結尾。
空介面的應用
使用空介面實現可以接收任意型別的函式引數。
使用空介面實現可以儲存任意值的字典。
乙個介面的值(簡稱介面值)是由乙個具體型別和具體型別的值兩部分組成的。這兩部分分別稱為介面的動態型別和動態值。
想要判斷空介面中的值這個時候就可以使用型別斷言,其語法格式:
x.(t)
其中:x:表示型別為inte***ce{}的變數
t:表示斷言x可能是的型別。
該語法返回兩個引數,第乙個引數是x轉化為t型別後的變數,第二個值是乙個布林值,若為true則表示斷言成功,為false則表示斷言失敗。
只有當有兩個或兩個以上的具體型別必須以相同的方式進行處理時才需要定義介面。不要為了介面而寫介面,那樣只會增加不必要的抽象,導致不必要的執行時損耗
Go語言中物件導向
go語言中沒有明確的oop object oriented programming 概念。go語言只提供了兩個關鍵型別 struct,inte ce。1 struct與c 語言中的普通struct相似,在go語言中是借助著struct結構體才實現的 2 inte ce是抽象類的型別,inte ce則...
go語言物件導向
go語言可通過struct宣告新的型別 新建乙個型別person type person struct var p1 person p1.name liming p1.age 18新建乙個型別student,可以通過匿名欄位將person所有欄位隱式引入student type student st...
GO語言物件導向
當初開發go語言的時候就是因為c 的特性太過於繁雜,從而使得很多c 的開發者因為c 的特性而頭疼,go語言成功的精簡了c 的特性,使其很簡潔,很少的特性,卻可以完成很多的事情。go語言中並沒有像c j a語言中這類的class,它只含有像c語言中的結構體,用結構體和指標等特性,完成乙個類的作用,很巧...