介面定義
其實就是面對物件裡面的多型性,而且比面對物件裡面的更容易理解。
介面定義了一組方法(方法集),但是這些方法不包含(實現)**:它們沒有被實現(它們是抽象的)。
介面裡也不能包含變數。
type namer inte***ce
上面的 namer 是乙個 介面型別。
(按照約定,只包含乙個方法的)介面的名字由方法名加 [e]r 字尾組成。
還有一些不常用的方式(當字尾 er 不合適時),比如 recoverable,此時介面名以 able 結尾,
或者以 i 開頭
舉個例子,就懂了
type ******r inte***ce
type sim1 struct
func
(arr sim1)
get(
)int
//前面的接收者是值的,建立該型別的指標或者值,都有可以賦給介面變數
//再由介面變數來呼叫介面。
//需要注意的是,因為接收者是值型別,所以在介面函式內部對該值的變動,只是對臨時拷貝的改變
func
(arr sim1)
set(a int
)error
type sim2 struct
//前面的接收者是指標的,只能先建立該型別的指標,賦值介面變數
//再由介面變數呼叫介面。如果該型別的值直接賦給介面變數,
//而不是指標,這會報錯
func
(arr *sim2)
get(
)int
func
(arr *sim2)
set(a int
)error
func
main()
輸出:000
100
介面巢狀
懂就行了
type readwrite inte***ce
type lock inte***ce
type file inte***ce
型別斷言:如何檢測和轉換介面變數的型別
乙個介面型別的變數 vari 中可以包含任何型別的值,必須有一種方式來檢測它的動態型別,
即執行時在變數中儲存的值的實際型別。
舉個例子:
type tner inte***ce
type tn1 struct
type tn2 struct
func
(tn *tn1)
show()
func
(tn *tn2)
show()
func
main()
else
if v, ok := objer.
(*tn2)
; ok
}
型別判斷:type-switch
接著上邊的例子
switch t := objer.
(type
)可以寫成函式,一下子判斷多個介面的型別
主要就是為了學習這種思想、寫法
func
classifier
(items ...
inte***ce)}
}
介面方法集呼叫規則
go 語言規範定義了介面方法集的呼叫規則:
型別 *t 的可呼叫方法集包含接受者為 *t 或 t 的所有方法集
型別 t 的可呼叫方法集包含接受者為 t 的所有方法
型別 t 的可呼叫方法集不包含接受者為 *t 的方法
空介面
type any inte***ce
可以給乙個空介面型別的變數 var val inte***ce
賦任何型別的值。
每個 inte***ce
變數在記憶體中佔據兩個字長:
乙個用來儲存它包含的型別,另乙個用來儲存它包含的資料或者指向資料的指標。
利用空介面:構建通用型別或包含不同型別變數的陣列
構建通用型別
利用空介面可以接收任何資料型別的特性,來實現可以構建通用型別的陣列
複製資料切片至空介面切片
如果你想將某一型別的切片中的資料複製到空介面的切片,是不能這樣做的:
var dataslice [
]mytype =
funcreturnslice()
var inte***ceslice [
]inte***ce
= dataslice
應為兩個東西的儲存布局是不相同的
應該這樣
var dataslice [
]mytype =
funcreturnslice()
var inte***ceslice [
]inte***ce
=make([
]inte***ce
,len
(dataslice)
)//先make乙個空介面切片
for i, d :=
range dataslice
介面仍舊有很多東西,學不動了,後續在補充
Golang 基礎 防備忘
常量 關於const的用法 const obj1 string cjs const obj2 nb 也可把tped去掉,系統會自動識別型別 const sunday 7 monday 1 tuesday 2 wednesday 3 thursday 4 friday 5 saturday 6 關於i...
Golang陣列 防備忘
沒有新東西,就是整理一遍,加強記憶!最基礎形式var obj 5 intobj 3 99 索引從0開始,可通過下標方式訪問,同c語言定義的同時賦值obj int obj int 這個他媽也是切片 obj 6 int 這三種方式均可 var obj 5 string 給對應的下標賦值,其餘下標資料為空...
Golang 檔案操作 防備忘
檔案概念 上圖中,返回的這個file指標,有三種叫法 檔案物件 檔案指標 檔案控制代碼 都可以 我們在理解的時候,其實file就是乙個指標,這樣更容易理解。檔案的開啟 關閉file,err os.open 路徑 檔名 if err nilerr file.close 檔案關閉 if err nil用...