go - 使用反射更新结构中的属性

标签 go struct reflection

是否可以更新基于结构的属性?

是否可以基于它的 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/

相关文章:

java - 如何通过注释为字段添加 getter 来在 Groovy 脚本中访问字段

json - HTTP 请求、JSON、重用连接

ios - iPhone 上的 Go 语言

go - Go lang函数返回多个值如何使用可变参数传递给其他函数

Go:通过接口(interface)访问结构体的属性{}

xcode - 将我的硬币变量传递给另一个场景

go - 将盒装结构转换到盒装指针 - golang

c - 什么时候值得在结构定义中使用指向结构的指针?

java - 在测试类中设置字段时出现 NullPointerException

c# - 如何在 C# 中使用反射来列出 .asmx 的方法