第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

滿足錯(cuò)誤接口的結(jié)構(gòu)的這個(gè) nil 實(shí)例沒(méi)有顯示為 nil

滿足錯(cuò)誤接口的結(jié)構(gòu)的這個(gè) nil 實(shí)例沒(méi)有顯示為 nil

Go
慕哥6287543 2021-09-13 19:48:53
這應(yīng)該是給某人的禮物。為什么我在這里沒(méi)有得到我期望的(“錯(cuò)誤不是零”)?http://play.golang.org/p/s8CWQxobVLtype Goof struct {}func (goof *Goof) Error() string {    return fmt.Sprintf("I'm a goof")}func TestError(err error) {    if err == nil {        fmt.Println("Error is nil")    } else {        fmt.Println("Error is not nil")    }}func main() {    var g *Goof // nil    TestError(g) // expect "Error is nil"}
查看完整描述

1 回答

?
慕無(wú)忌1623718

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ì)于int3,接口值示意性地包含(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è)例子中,xy變量背后的數(shù)據(jù)顯然是3,但它們有不同的類型。當(dāng)您將xy放入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)

}


查看完整回答
反對(duì) 回復(fù) 2021-09-13
  • 1 回答
  • 0 關(guān)注
  • 166 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)