students :=append( make([]Student,0,3),
Student{"aaa",1,9},
Student{"bbb",2,6},
Student{"ccc",4,10})
tar := make([] reflect.Value,0,3)
for _,s := range students {
c := reflect.ValueOf(&s).Elem()
fmt.Println(c)
tar = append(tar,c)
for _,e := range tar {
fmt.Println(e,"===")
}
}
for _,e := range tar {
fmt.Println(e)
}
就3个student对象,每个都不一样,我取每个的反射append到一个数组里,到最后数组里是3最后一个student的反射对象
就是每次往数组添加元素都会把之前以存在的对象都覆盖成这次添加的。student对象就没事,就反射对象会这样
谢谢各位,我以前是java这个go的反射确实很不习惯。在这再问个问题,go有是吗方式能支持范型吗。问觉得范型真是一个很好的东西,go有什么可以代替吗
#4
更多评论
这是因为你添加的反射其实是一个指针,指向的是同一个对象.
所以你添加了不管多少次,都只是添加了相同的指针,指向的东西是同一个.
golang的反射不是很完美, 不像java那样无所不能.
#1
在取反射值的时候go会开启另一个协程去处理,所以你这个代码需要修改为:
```
for _, s := range students {
j := s
c := reflect.ValueOf(&j).Elem()
fmt.Println(c)
tar = append(tar, c)
}
```
#2