1 回答
TA貢獻1773條經驗 獲得超3個贊
unmarshal 函數遍歷指針和包含指針值的接口以找到目標值。接口中的非指針值將被忽略,因為這些值不可尋址。(此描述省略了對問題不重要的細節)。
如果目標是 aninterface{}并且 JSON 是對象,則 JSON 被解組為 amap[string]interface{}并將該值存儲在接口中。
測試 1:解組的參數是*Test。unmarshal 函數遍歷指針并解碼為Test結構。
測試 2:unmarshal 的參數是指向interface{}包含Test.?unmarshal 函數遍歷指針以獲取interface{}.?Test中的值被interface{}忽略,因為它不可尋址。因為目標是 aninterface{}而 JSON 是對象,所以 JSON 被解碼為map[string]interface{}.
3、4、5 和 6 中的代碼無法編譯。假設刪除了{}以下內容,我將繼續Test。
var o2 Test = o // 3
var o2 *Test = &o // 4
var o2 *Test = &o // 5
var o2 *Test = &o // 6
測試 3 和 5:unmarshal 的參數是一個*Test.?這與#1 相同。
測試 4 和 6:參數是一個**Test.?unmarshal 函數遍歷指針并解碼到Test結構。
因為 Go 沒有任何類似“超類”的東西,所以這不是問題。
- 1 回答
- 0 關注
- 164 瀏覽
添加回答
舉報
