go語言介面

2022-10-09 06:00:10 字數 962 閱讀 4138

介面在底層的實現有兩個部分:type 和 data。

在原始碼中,顯式地將 nil 賦值給介面時,介面的 type 和 data 都將為 nil。此時,介面與 nil 值判斷是相等的。但如果將乙個帶有型別的 nil 賦值給介面時,只有 data 為 nil,而 type 為 nil,此時,介面與 nil 判斷將不相等。

nil 在 go語言中只能被賦值給指標和介面。

因此,go 語言中的 nil,是不一定相等,因為介面的 nil 和型別的 nil 在資料結構上一樣,但是值不一樣.

下面**使用 myimplement() 實現 fmt 包中的 stringer 介面,這個介面的定義如下:

type stringer inte***ce
在 getstringer() 函式中將返回這個介面。通過*myimplement指標變數置為 nil 提供 getstringer 的返回值。在main()中,判斷 getstringer 與 nil 是否相等,**如下:

package main

import "fmt"

// 定義乙個結構體

type myimplement struct{}

// 實現fmt.stringer的string方法

func (m *myimplement) string() string

// 在函式中返回fmt.stringer介面

func getstringer() fmt.stringer

func main() else

}

為了避免這類誤判的問題,可以在函式返回時,發現帶有 nil 的指標時直接返回 nil,**如下:

func getstringer() fmt.stringer 

return s

}

Go 語言介面

go 語言提供了另外一種資料型別即介面,它把所有的具有共性的方法定義在一起,任何其他型別只要實現了這些方法就是實現了這個介面。例項 定義介面 type inte ce name inte ce 定義結構體 type struct name struct 實現介面方法 func struct name...

Go語言 介面

介面代表一種呼叫契約,是多個方法宣告的集合。介面要實現的是做什麼,而不關心如何做。介面最常見的使用場景是對包外提供訪問,或預留擴充套件空間。go語言介面實現機制很簡潔,只要目標型別方法集內包含介面宣告的全部方法,就被視為實現了該介面,無需做顯示宣告,當然目標型別可實現多個介面。其實介面也是一中結構,...

Go語言 介面

在go語言中,乙個介面型別總是代表著某一種型別 即所有實現它的型別 的行為。乙個介面型別的宣告通常會包含關鍵字type 型別名稱 關鍵字inte ce以及由花括號包裹的若干方法宣告。示例如下 type animal inte ce注意,介面型別中的方法宣告是普通的方法宣告的簡化形式。它們只包括方法名...