2 回答

TA貢獻1818條經驗 獲得超8個贊
這個答案很好地解釋了為什么你會得到例外。
你應該做什么:
當encoding/json包遇到實現Marshaler接口的類型時,它使用該類型的MarshalJSON()
方法而不是默認的封送處理代碼將對象轉換為 JSON。類似地,在解碼 JSON 對象時,它將測試對象是否實現了Unmarshaler接口,如果是,它將使用該UnmarshalJSON()
方法而不是默認的解組行為。
我的解決方案是在 上實現UnmarshalJSON方法*ConfigurationData
,方法Load
應該接受Unmarshaler接口而不是interface{}
.
您可以在此處閱讀有關技術的更多信息:https ://blog.gopheracademy.com/advent-2016/advanced-encoding-decoding/
然后你會在從文件中讀取b 的方法json.Unmarshal(b, &config)
中做簡單的事情。Load
[]byte

TA貢獻1845條經驗 獲得超8個贊
根據json.Unmarshall 上的文檔,解組為接口值將解組為預定義類型列表之一的新結構:
為了將 JSON 解組為接口值,Unmarshal 將其中一個存儲在接口值中:
bool, for JSON booleans
float64, for JSON numbers
string, for JSON
strings []interface{}, for JSON arrays
map[string]interface{}, for JSON objects
nil for JSON null
在您的例子中,選擇的類型是map[string]interface{}. 在您的函數中,指向新解組結構的指針存儲在配置參數中并返回。發生恐慌是因為返回值的類型不是您聲明的類型。
- 2 回答
- 0 關注
- 113 瀏覽
添加回答
舉報