golang通过反射设置结构体字段的值
type Person struct {故宫太和殿
代表死亡的符号Name string `json:"name"`
Age int `json:"age"`
}
func SetValueToStruct(name string,age int) *Person {
人的优点p := &Person{}
v := reflect.ValueOf(p).Elem()
v.FieldByName("Name").Set(reflect.ValueOf(name))大和银行
v.FieldByName("Age").Set(reflect.ValueOf(age))
return p
}
func main() {
p := SetValueToStruct("张三",18)
fmt.Println(*p)
}
注:可能出现的错误
1.结构体⾸字母必须⼤写,否则会出现:panic: reflect: reflect.Value.Set using value obtained using unexported field
在Golang中⾸字母的⼤⼩写代表着访问权限,⾸字母⼩写则包外⽆法访问
思维定势的意思
2. 反射需要使⽤地址否则会出现:panic: reflect: reflect.Value.Set using unaddressable value东部华侨城
如下代码就会出现panic
p := Person{}
v := reflect.ValueOf(p)北京美食介绍
v.FieldByName("Name").Set(reflect.ValueOf(name))
v.FieldByName("Age").Set(reflect.ValueOf(age))
百侯薄饼