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

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

為什么 json.Unmarshal 使用引用而不是指針?

為什么 json.Unmarshal 使用引用而不是指針?

Go
qq_笑_17 2021-07-09 14:00:36
這個(gè)來(lái)自json.Unmarshal文檔的例子(為了簡(jiǎn)單使用Animal而不是稍微修改[]Animal)有效,沒(méi)有錯(cuò)誤:// ...var animals Animalerr := json.Unmarshal(jsonBlob, &animals)// ...但是這個(gè)稍微修改的例子沒(méi)有:// ...var animals *Animalerr := json.Unmarshal(jsonBlob, animals)// ...它顯示了這個(gè)確實(shí)沒(méi)有幫助的模糊錯(cuò)誤(看起來(lái)更像是函數(shù)調(diào)用而不是錯(cuò)誤 IMO):json: Unmarshal(nil *main.Animal)這似乎是因?yàn)閍nimals是一個(gè)未初始化的指針。但是文檔說(shuō)(強(qiáng)調(diào)我的):Unmarshal 將 JSON 解組為指針指向的值。如果指針為 nil,則 Unmarshal 為其分配一個(gè)新值以指向它。那么為什么在第二個(gè)示例中解組失敗并顯示出那個(gè)晦澀的錯(cuò)誤呢?(此外,它是“解組”還是“解組”(一個(gè) L)?文檔同時(shí)使用了兩者。)
查看完整描述

3 回答

?
慕俠2389804

TA貢獻(xiàn)1719條經(jīng)驗(yàn) 獲得超6個(gè)贊

您遇到了InvalidUnmarshalError(請(qǐng)參閱decode.go 中的第 109 和 110 行)。

// InvalidUnmarshalError 描述了傳遞給 Unmarshal 的無(wú)效參數(shù)。
// (Unmarshal 的參數(shù)必須是非 nil 指針。)

似乎文檔可以做一些澄清,因?yàn)樯厦娴囊煤拖旅鎭?lái)自Unmarshal來(lái)源的評(píng)論似乎相互矛盾。

如果指針為 nil,則 Unmarshal 為其分配一個(gè)新值以指向它。


查看完整回答
反對(duì) 回復(fù) 2021-07-12
?
躍然一笑

TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個(gè)贊

我相信問(wèn)題在于,雖然您可以將指向 nil的指針傳遞給 Unmarshal(),但您不能傳遞nil 指針 value。


指向 nil 的指針類(lèi)似于:


var v interface{}

json.Unmarshal(text, &v)

的值為vnil,但指向的指針v是非零指針地址。它是一個(gè)非零指針,指向一個(gè) nil interface{}(它本身是一個(gè)指針類(lèi)型)。在這種情況下,解組不會(huì)返回錯(cuò)誤。


一個(gè) nil 指針是這樣的:


var v *interface{}

json.Unmarshal(text, v)

在這種情況下, v 的類(lèi)型是pointer to an interface{},但與 golang 中 var 的任何聲明一樣, 的初始值v是該類(lèi)型的零值。所以v是一個(gè)零值指針,這意味著它不指向內(nèi)存中任何有效的地方。



查看完整回答
反對(duì) 回復(fù) 2021-07-12
  • 3 回答
  • 0 關(guān)注
  • 323 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(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)