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 關注
- 145 瀏覽
添加回答
舉報