```
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)
```
谢谢了.
needUpdate 是一个map,map的反射可以用 Len、MapIndex、MapKeys、SetMapIndex等方法
http://docs.studygolang.com/pkg/reflect/#Value.Len
http://docs.studygolang.com/pkg/reflect/#Value.MapIndex
http://docs.studygolang.com/pkg/reflect/#Value.MapKeys
http://docs.studygolang.com/pkg/reflect/#Value.SetMapIndex
#1
更多评论