使用reflect表示接口类型的设定值

时间:2018-05-17 08:36:01

标签: go

我有一个类型为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参数中的类型字符串:需要类型断言

1 个答案:

答案 0 :(得分:1)

您需要使用类型断言,更改代码如下:

    if fieldValue.Type().String() == "string" {
        fieldValue.SetString(val.(string))
    }else if fieldValue.Type().String() == "int"{
        fieldValue.SetInt(val.(int64))
    }