是否可以更新基于结构的属性?
是否可以基于它的 JSON 标签来做?
假设一个简单的结构:
type User struct {
Name string `json:"username"`
}
我需要使用反射以编程方式更新Name
属性。我尝试了以下方法:
user := User{Name: "John"}
obj := reflect.Indirect(reflect.ValueOf(user))
obj.FieldByName("Name").SetString("Jake")
panic :反射(reflect):reflect.Value.SetString 使用不可寻址的值
https://play.golang.org/p/gkBgRXwje57
最佳答案
要获取可寻址的值,将用户
的地址传递给reflect.ValueOf
:
user := User{Name: "John"}
obj := reflect.Indirect(reflect.ValueOf(&user))
obj.FieldByName("Name").SetString("Jake")
fmt.Println(user.Name)
已知本例中的值是一个指针,所以直接调用Elem():
user := User{Name: "John"}
obj := reflect.ValueOf(&user).Elem()
obj.FieldByName("Name").SetString("Jake")
fmt.Println(user.Name)
关于go - 使用反射更新结构中的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48568542/