我有一个类型为interface的值的地图。另外我想使用这个地图键,val用另一个func中的变量值反映。
func main(){
ValueForUpdate := make(map[string]interface{})
ValueForUpdate["DeliveryCount"] = 2 //type int
ValueForUpdate["BulkId"] = "100200300" //type string
UpdateSendTBL(ValueForUpdate)
}
func UpdateSendTBL(keyNewVal map[string]interface{}){
get := // some data
rowValue := reflect.ValueOf(get).Elem()
for key, val := range keyNewVal {
fieldValue := rowValue.FieldByName(key)
if fieldValue.Type().String() == "string" {
fieldValue.SetString(val)
}else if fieldValue.Type().String() == "int"{
fieldValue.SetInt(val)
}
}
}
但是这个错误:
不能在fieldValue.SetInt的参数中使用val(类型接口{})作为类型int64:需要类型断言
不能使用val(类型接口{})作为fieldValue.SetString参数中的类型字符串:需要类型断言
答案 0 :(得分:1)
您需要使用类型断言,更改代码如下:
if fieldValue.Type().String() == "string" {
fieldValue.SetString(val.(string))
}else if fieldValue.Type().String() == "int"{
fieldValue.SetInt(val.(int64))
}