Goland中Type關鍵字的幾種使用場景

2021-10-17 04:32:38 字數 1920 閱讀 6122

type 關鍵字可以用來定義結構體:

type user struct
其實就是給原來的型別加乙個別名,方便我們後面呼叫。

type str string

//在下面的**中str就可以代替string使用了

var str1 str = "我是乙個型別別名"

//這裡不只是基礎型別 結構體(復合型別)也可以使用別名

type (

i int

ia int

u user

)

以上面的例子來說,後面的**裡 str 在很多場合都可以作為string關鍵字使用,但是它倆也有不一樣的地方,這個我們後面會講。

這裡 我們定義乙個 speak 裡面 包含乙個方法call。

//這裡 我們定義乙個 speak 裡面 包含乙個方法call

type speak inte***ce

因為在goland中,函式也是一種資料型別,具有相同引數和返回值的函式,我們認為它們的型別相同。(我們這裡的相同指的是:個數、資料型別、順序全部相同)。

其實,如果你把函式也當做一種型別來看的話,type的這種使用方式跟我們說的第二種使用方式(型別別名)是一致的。

type handler func(string) int
接下來我們結合**來看看它們的使用場景和要注意的點

首先我們定義乙個函式,我們將它的引數指定為我們剛剛定義的handler 函式型別

func testfunc(handler2 handler)
當我們呼叫testfunc的時候,我們需要乙個handler型別的引數:

var handlerfunc handler = func(s string) int 

//這樣執行時沒問題的

testfunc(handlerfunc)

既然上面說了,當函式的引數和返回值型別一致的時候,可以視為同乙個型別,我們來看乙個例子:

handlerfunc2 := func(s string) int 

testfunc(handlerfunc2)

我們沒有使用handler,直接定義了乙個函式,可以看到在函式的引數和返回值一致的時候,同樣可以作為testfunc的引數。

注意:在絕大多數情況下,型別別名和源型別是等價的,但是也有例外的情況。比如我們在寫方法的時候:

請看下面的例子:

func (h handler)call()string

func (s str)call()str

func (user user) call()str

我們分別實現了三個方法,其實就是在別名str(對應string)、handler(對應 func(s string)int 函式型別、user(結構體 別名為u 上面有定義)。

handlerfunc.call()//這樣是可以執行的

//但是 下面的寫法確實不可以的

handlerfunc2.call()//編譯器給出了乙個錯誤"未解析的引用'call'"

//同理

var str1 str = "我是乙個string的別名"

str1.call()//這樣呼叫是沒有問題的

var str2 string = "我是乙個傳統的字串"

str2.call()//編譯器報錯了

user := user{}

user.call()//也沒有問題

user1 := u{}

user1.call()//編譯器報錯

這個時候我們可以得出結論:在我們是有type 定義型別別名(定義函式型別)的時候,他們所實現的方法是不互通的。

new關鍵字 this關鍵字 base關鍵字

使用new,所做的三件事 1.類是引用物件,引用物件是在堆中開闢空間 在堆中開闢空間 2.在開闢的堆空間中建立物件 3.呼叫物件的構建函式 4.隱藏父類成員 子類的成員可以與隱藏從父類繼承的成員,類似於重寫。public new void sayhello this關鍵字的使用 1.代表當前類的物件...

C語言學習筆記 type關鍵字

typedef為c語言的關鍵字,作用是為一種資料型別定義乙個新名字。這裡的資料型別包括內部資料型別 int,char等 和自定義的資料型別 struct等 使用typedef定義新型別的方法 在傳統的變數宣告表示式裡用 新的 型別名替換變數名,然後把關鍵字typedef加在該語句的開頭即可。例 in...

Python使用type關鍵字建立類步驟詳解

python使用type關鍵字建立類 開啟命令列視窗,輸入python,進入python互動環境 python 一般建立類使用class關鍵字即可,測試命令如下 class coo pass obj1 coo print obj1 c coo obj2 c print obj2 type關鍵字可以動...