ibeautiful
2023-07-04 09:57:42
有以下內(nèi)容:type FlexInt intfunc (fi *FlexInt) UnmarshalJSON(data []byte) error {? ? if data[0] != '"' {? ? ? ? return json.Unmarshal(data, (*int)(fi))? ? }? ? var s string? ? if err := json.Unmarshal(data, &s); err != nil {? ? ? ? return err? ? }? ? i, err := strconv.Atoi(s)? ? if err != nil {? ? ? ? return err? ? }? ? *fi = FlexInt(i)? ? return nil}我明白它在做什么——但我不明白(*int)(fi)其中的一部分。查看指針的值,它與-fi相同。然而,當(dāng)我將該行更改為簡單時(shí),它會(huì)執(zhí)行無限循環(huán)(*int)(fi)(*int)(fi) == fifi
2 回答

阿晨1998
TA貢獻(xiàn)2037條經(jīng)驗(yàn) 獲得超6個(gè)贊
該表達(dá)式轉(zhuǎn)換?fi
為*int
.?結(jié)果包含相同的地址,但具有不同的類型。
如果將 a*FlexInt
傳遞給json.Unmarshal
,則將json.Unmarshal
調(diào)用*FlexInt.UnmarshalJSON
調(diào)用的方法json.Unmarshal
,依此類推。

嚕嚕噠
TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超7個(gè)贊
它是相同的指針,但類型不同。當(dāng)使用包含 a 的json.Unmarshal
an 調(diào)用時(shí),它會(huì)調(diào)用的方法。當(dāng)使用包含 an 的 an調(diào)用它時(shí),它使用內(nèi)置行為。由于和具有相同的基礎(chǔ)類型,因此可以將指向一個(gè)的指針轉(zhuǎn)換為指向另一個(gè)的指針,但這是接口將標(biāo)記的“實(shí)際”類型。interface{}
FlexInt*
FlexInt
UnmarshalJSON
interface{}
int*
FlexInt
int
- 2 回答
- 0 關(guān)注
- 144 瀏覽
添加回答
舉報(bào)
0/150
提交
取消