1 回答

TA貢獻(xiàn)1744條經(jīng)驗(yàn) 獲得超4個(gè)贊
事實(shí)證明,這是一個(gè)關(guān)于 Go 的常見(jiàn)問(wèn)題,簡(jiǎn)短的回答是接口比較比較了類型和值,(*Goof)(nil)
并且error(nil)
有不同的類型。
由于if err != nil
是標(biāo)準(zhǔn)的,您需要一個(gè)可以使用它的返回值。您可以聲明var err error
而不是var g *Goof
:err
的零值很方便error(nil)
或者,如果您的 func 返回error
,return nil
將返回您想要的。
有關(guān)更多背景信息,這是常見(jiàn)問(wèn)題解答的開(kāi)頭:
在幕后,接口被實(shí)現(xiàn)為兩個(gè)元素,一個(gè)類型和一個(gè)值。值,稱為接口的動(dòng)態(tài)值,是一個(gè)任意的具體值,類型是值的類型。對(duì)于
int
值3
,接口值示意性地包含(int, 3)
。接口值
nil
僅當(dāng)內(nèi)部值和類型都未設(shè)置時(shí),(nil, nil)
。特別是,nil
接口將始終包含一個(gè)nil
類型。如果我們*int
在接口值中存儲(chǔ)類型指針,則內(nèi)部類型將*int
與指針的值無(wú)關(guān):(*int, nil)
。因此,nil
即使內(nèi)部的指針是 ,這樣的接口值也將是非nil
。
并且==
嚴(yán)格檢查類型是否相同,而不是類型(*Goof
)是否實(shí)現(xiàn)了接口(error
)。查看原文了解更多。
如果它有助于澄清,這不僅發(fā)生在nil
: 在這個(gè)例子中,x
和y
變量背后的數(shù)據(jù)顯然是3
,但它們有不同的類型。當(dāng)您將x
和y
放入interface{}
s 時(shí),它們比較為不相等:
package main
import "fmt"
type Bob int
func main() {
var x int = 3
var y Bob = 3
var ix, iy interface{} = x, y
fmt.Println(ix == iy)
}
- 1 回答
- 0 關(guān)注
- 166 瀏覽
添加回答
舉報(bào)