关于通用类型和Slice的一个问题

GuoYuefei · · 879 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

```go type vv struct { a interface{} } func (v *vv) setV(a interface{}) { v.a = a } func (v *vv) getvvSlice() []*vv { if a, ok := v.a.([]*vv); ok { return a } return nil } type ss struct { Data []*vv } func dd() { //v := &vv{1} vs := make([]*vv,0,10) vs = append(vs,&vv{123}) //将切片分装成vv类型 vvs := &vv{vs} s := &ss{make([]*vv,0,12)} s.Data = append(s.Data, vvs) fmt.Printf("%p\n", s.Data[0].a) fmt.Println(s.Data[0].getvvSlice()) vvvs := s.Data[0].getvvSlice() fmt.Printf("vvvs.poriner1: %p \n", vvvs) vvvs = append(vvvs, &vv{2134214}) fmt.Println("vvvs:", vvvs) fmt.Printf("vvvs.poriner2: %p \n", vvvs) fmt.Printf("%p\n", s.Data[0].a) fmt.Println(s.Data[0].getvvSlice()) } ``` 执行dd()后 output >> ```shell 0xc00009a050 [0xc000042170] vvvs.poriner1: 0xc00009a050 vvvs: [0xc000042170 0xc000042190] vvvs.poriner2: 0xc00009a050 0xc00009a050 [0xc000042170] ``` 明显我加了一个元素到ss->Data[0]所指向的切片里了,但是取切片的时候发现里面根本就没新增元素。这是怎么回事啊? 看了下指针没问题啊,感觉我对切片的理解还是没到位。 求各路大神解答,我在优化自己代码是碰到的问题,现在只能通过出栈在压栈的方式解决这个问题,但是这样一来效率就减少了。

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

879 次点击  
加入收藏 微博
1 回复  |  直到 2018-11-21 18:59:45
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传