2 回答

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超3個(gè)贊
回答標(biāo)題中的問題:接口指針是指向接口值的指針。但是,接口指針并沒有那么有用,因?yàn)榻涌谝呀?jīng)是引用類型。
至于為什么您的代碼在結(jié)構(gòu)時(shí)無法編譯Node,您正在嘗試將指針傳遞給帶值的函數(shù)。你應(yīng)該這樣做:
func test1(b *Node) {
test2(*b)
}
但是當(dāng)Node是空接口時(shí),其參數(shù)的test2()類型interface{}也稱為空接口。任何類型(包括b指針)都將被隱式轉(zhuǎn)換為空接口。因此,當(dāng)它的參數(shù)是 type 時(shí),傳遞任何東西test2()都會(huì)編譯interface{}。

TA貢獻(xiàn)2011條經(jīng)驗(yàn) 獲得超2個(gè)贊
讓我們看一下聲明的一些變體Node:
示例 1:
type Node interface {
}
代碼編譯是因?yàn)樗蓄愋投紳M足空接口。
示例 2:
type Node interface {
AnyMethod()
}
編譯器報(bào)告以下錯(cuò)誤:
不能在 test2 的參數(shù)中使用 b (type *Node) 作為類型 Node:*Node 是指向接口的指針,而不是接口
編譯失敗,因?yàn)?a*Node沒有方法AnyMethod。
示例 3:
type Node struct {
}
編譯器報(bào)告以下錯(cuò)誤:
不能在 test2 的參數(shù)中使用 b (type *Node) 作為類型 Node
編譯失敗是因?yàn)?Node和Node是不同的類型。
編譯錯(cuò)誤的一種修復(fù)方法是取消引用指針:
func test1(b *Node) {
test2(*b)
}
- 2 回答
- 0 關(guān)注
- 157 瀏覽
添加回答
舉報(bào)