亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Golang 地址運算符和 (*int)(Type) 語法

Golang 地址運算符和 (*int)(Type) 語法

Go
ibeautiful 2023-07-04 09:57:42
有以下內容: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相同。然而,當我將該行更改為簡單時,它會執行無限循環(*int)(fi)(*int)(fi) == fifi
查看完整描述

2 回答

?
阿晨1998

TA貢獻2037條經驗 獲得超6個贊

該表達式轉換?fi*int.?結果包含相同的地址,但具有不同的類型。

如果將 a*FlexInt傳遞給json.Unmarshal,則將json.Unmarshal調用*FlexInt.UnmarshalJSON調用的方法json.Unmarshal,依此類推。


查看完整回答
反對 回復 2023-07-04
?
嚕嚕噠

TA貢獻1784條經驗 獲得超7個贊

它是相同的指針,但類型不同。當使用包含 a 的json.Unmarshalan 調用時,它會調用的方法。當使用包含 an 的 an調用它時,它使用內置行為。由于和具有相同的基礎類型,因此可以將指向一個的指針轉換為指向另一個的指針,但這是接口將標記的“實際”類型。interface{}FlexInt*FlexIntUnmarshalJSONinterface{}int*FlexIntint

查看完整回答
反對 回復 2023-07-04
  • 2 回答
  • 0 關注
  • 149 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號