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对象就没事,就反射对象会这样
在取反射值的时候go会开启另一个协程去处理,所以你这个代码需要修改为:
```
for _, s := range students {
j := s
c := reflect.ValueOf(&j).Elem()
fmt.Println(c)
tar = append(tar, c)
}
```
#2
更多评论
这是因为你添加的反射其实是一个指针,指向的是同一个对象.
所以你添加了不管多少次,都只是添加了相同的指针,指向的东西是同一个.
golang的反射不是很完美, 不像java那样无所不能.
#1
#### **for 的使用问题**
**改成这样**
```
stmp:=s
c := reflect.ValueOf(&stmp).Elem()
```
#3