我在 golang 中有一個型別為: 的地圖物件, *map[string]interface{} 我如何斷言它包含某些鍵?這是我所擁有的:
type respObj struct {
ExternalIds *map[string]interface{} `json:"externalIds,omitempty"`
}
myObj := getRespObj()
out, _ := json.Marshal(myObj)
fmt.Println("Response: ", string(out))
// {"externalIds":{"payroll":"bigmoney","serial":"GA3MXX4VV7","vin":"1G1YY3388L5112656"}}
assert.NotNil(t, myObj.ExternalIds)
assert.Contains(t, &myObj.ExternalIds, "payroll")
assert.Contains(t, &myObj.ExternalIds, "serial")
assert.Contains(t, &myObj.ExternalIds, "vin")
當前拋出錯誤:
Error: "%!s(**map[string]interface {}=0xc0079bf920)" could not be applied builtin len()
uj5u.com熱心網友回復:
您應該將地圖傳遞給assert.Contains().
myObj.ExternalIds是指向地圖的指標,因此&myObj.ExternalIds將是指向地圖指標的指標。
而不是獲取它的地址,取消參考指標:
assert.Contains(t, *myObj.ExternalIds, "payroll")
assert.Contains(t, *myObj.ExternalIds, "serial")
assert.Contains(t, *myObj.ExternalIds, "vin")
請注意,地圖是引擎蓋下的指標。很少需要指向映射的指標,傳遞映射具有指標語意,而且它很高效(只有一個指標在引擎蓋下傳遞)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/512038.html
標籤:字典去测试
