dongliangkeng1056 2018-05-17 08:36
浏览 63
已采纳

使用反射作为接口类型的设置值

I have a map with value of type interface.Also I want to use this map key,val for change value in another func with reflect.

    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)
            }

        }
    }

but this error :

cannot use val (type interface {}) as type int64 in argument to fieldValue.SetInt: need type assertion

cannot use val (type interface {}) as type string in argument to fieldValue.SetString: need type assertion

  • 写回答

1条回答 默认 最新

  • dpmkif3097 2018-05-17 08:39
    关注

    You need to make use of type assertion, change the code as below:

        if fieldValue.Type().String() == "string" {
            fieldValue.SetString(val.(string))
        }else if fieldValue.Type().String() == "int"{
            fieldValue.SetInt(val.(int64))
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 微信小程序协议怎么写
  • ¥15 c语言怎么用printf(“\b \b”)与getch()实现黑框里写入与删除?
  • ¥20 怎么用dlib库的算法识别小麦病虫害
  • ¥15 华为ensp模拟器中S5700交换机在配置过程中老是反复重启
  • ¥15 java写代码遇到问题,求帮助
  • ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看