Go語言的接口簡介

接口

接口可以嵌入另一個接口類型的匿名字段。編譯器會自動展開。

接口帶的是方法聲明,帶方法名,方法名是接口類型的一部分。
接口的命名一般以 er 結尾。
單獨聲明接口變量沒有意義,只有被初始化的具體類型纔有意義、
接口的意義:我們內部的某類型需要返回回去,但是一部分方法和屬性不想對外暴露。我們可以聲明一個希望暴露的接口返回回去。拿到的返回值就只有接口的方法可以使用。屬性字段和沒有暴露的方法不可被訪問。增加了安全性。
對一些屬性的獲取和設置可以新增方法來 get 和 set

接口之間賦值,被賦值的接口類型必須實現比賦值者少或者相等的方法,否則會出現調用不存在的方法。

接口方法的調用不是一種直接的調用,調用的地址是在運行期決定的,有一定的運行時開銷。

函數簽名

函數的字面量類型,不包含函數名。

函數聲明

帶函數名的函數簽名。

接口的動態類型

接口綁定的具體實例的類型稱爲接口的動態類型

接口的靜態類型

接口被定義時,其類型就被確定了,這個類型叫接口的靜態類型。本質特徵是接口的方法簽名集合。

接口的賦值

編譯器校驗接口能否被賦值,看的是接口的方法集。

接口類型斷言和接口類型查詢

類型斷言:
i 必須是接口變量,如果是具體類型變量會報錯。,TypeName 可以說接口類型名和具體類型名。
i . (TypeName)
if o,ok:=i.(TypeName);ok{
o 是斷言成功後 TypeName 的類型實例。是 i 的副本。如果 i 是指針,就是指針副本。
}

類型查詢:
i 未初始化,則 v 爲 nil;
i 初始化了,未匹配任何 case 進入 default,v:=i,v 沒有任何意義;
i 初始化了,某個 case 多個類型逗號分割並且還匹配了,v:=i,v 沒有任何意義;
switch v:=i.(type){
case type1:

default:
xxx
}

接口使用形式

1.作爲結構內嵌字段; 2.作爲函數或方法的形參或返回值; 3.作爲其他接口定義的嵌入字段。
作爲結構內嵌字段是爲了方便對接口的一些方法重寫。(https://blog.csdn.net/Edu_enth/article/details/104961866)

空接口

空接口是反射實現的基礎。
接口有兩個字段:實例類型和指向綁定實例的指針;只有這兩個都爲 nil 是接口才爲 nil。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章