Ark*_*kon 3 reflection struct go
是否可以更新基于结构的属性?
是否可以根据其 JSON 标签来实现?
假设一个简单的结构:
type User struct {
Name string `json:"username"`
}
Run Code Online (Sandbox Code Playgroud)
我需要使用反射以编程方式更新Name属性。我尝试了以下方法:
user := User{Name: "John"}
obj := reflect.Indirect(reflect.ValueOf(user))
obj.FieldByName("Name").SetString("Jake")
Run Code Online (Sandbox Code Playgroud)
panic: reflect: reflect.Value.SetString using unaddressable value
https://play.golang.org/p/gkBgRXwje57
要获得可寻址值,请将 的地址传递user给reflect.ValueOf:
user := User{Name: "John"}
obj := reflect.Indirect(reflect.ValueOf(&user))
obj.FieldByName("Name").SetString("Jake")
fmt.Println(user.Name)
Run Code Online (Sandbox Code Playgroud)
已知在这种情况下该值是一个指针,因此直接调用 Elem() :
user := User{Name: "John"}
obj := reflect.ValueOf(&user).Elem()
obj.FieldByName("Name").SetString("Jake")
fmt.Println(user.Name)
Run Code Online (Sandbox Code Playgroud)