写了2个小例子,第一个正确,为什么第二个报错啊? 我参数传结构,然后再ValueOf(指针)为啥就不行? 参数必须传指着吗? 那要是参数传的结构而不是指针那要怎样才行呢?
例子一:
type Man struct{
Age int
Name string
}
func test(arg interface{}){
val := reflect.ValueOf(arg)
val = val.Elem()
if val.CanSet(){
f := val.FieldByName("Name")
f.SetString("xiao ming")
}
}
func main(){
man := Man{16,"xiaohong"}
test(&man)
}
例子二:
type Man struct{
Age int
Name string
}
func test(arg interface{}){
val := reflect.ValueOf(&arg)
val = val.Elem()
if val.CanSet(){
f := val.FieldByName("Name") //这句触发panic
f.SetString("xiao ming")
}
}
func main(){
man := Man{16,"xiaohong"}
test(man)
}
你可以看看这样的例子:
意思就是说,arg指的传进来的东西,&arg都指的是arg的地址,在两个函数中都是一样的,而我们想要struct的地址。