3 回答

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è)新值以指向它。

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)存中任何有效的地方。
- 3 回答
- 0 關(guān)注
- 323 瀏覽
添加回答
舉報(bào)