Golang 介面 防備忘

2021-10-13 03:10:31 字數 2716 閱讀 7092

介面定義

其實就是面對物件裡面的多型性,而且比面對物件裡面的更容易理解。

介面定義了一組方法(方法集),但是這些方法不包含(實現)**:它們沒有被實現(它們是抽象的)。

介面裡也不能包含變數。

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用...