golang动态修改struct

fenglangjuxu · · 2404 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

``` package main import ( "fmt" ) type RedisGroupInfo struct { Name string `json:"name"` Img string `json:"img"` N int `json:"n"` } func main() { var newInfo RedisGroupInfo //needUpdate := RedisGroupInfo{Name: "hello"} needUpdate := map[string]interface{}{ "Name": "hello", } /* mutable := reflect.ValueOf(&needUpdate).Elem() mutable.FieldByName("N").SetInt(7) f1 := reflect.TypeOf(&needUpdate).Elem() fmt.Println(f1) v := reflect.ValueOf(needUpdate) count := v.NumField() for i := 0; i < count; i++ { f := v.Field(i) switch f.Kind() { case reflect.String: fmt.Println(f) fmt.Println(f.String()) case reflect.Int: fmt.Println(f) fmt.Println(f.Int()) } } */ for k, value := range needUpdate { if k == "Name" { newInfo.Name = value.(string) } else if k == "Img" { newInfo.Img = value.(string) } } fmt.Println(newInfo) } ``` 想实现的目的是: 根据needUpdate这个入参,更新里面newInfo里面的数据.比如 ``` needUpdate := map[string]interface{}{ "Name": "hello", } ``` ,则更新Name字段为hello. 只要可以实现,入参needUpdate,可以接受是map[string]interface{}类型或者是RedisGroupInfo数据类型. 注释掉的代码,可以获取value,但是获取不了key,要是可以获取key,应该就可以用这个实现我的目的了. ``` "N"就是我说的key. mutable := reflect.ValueOf(&needUpdate).Elem() mutable.FieldByName("N").SetInt(7) ``` 谢谢了.

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2404 次点击  
加入收藏 微博
2 回复  |  直到 2018-04-04 11:22:21
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传