1. 首页
  2. 主题
  3. Go问与答

我真是无法理解了,go切片数组问题,求大佬解决

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

用户登录

没有账号?注册

今日阅读排行

    加载中

一周阅读排行

    加载中