```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
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, len:%d, cap:%d \n", vvvs, len(vvvs), cap(vvvs))
fmt.Printf("%p, len:%d, cap:%d \n", s.Data[0].a, len(s.Data[0].getvvSlice()), cap(s.Data[0].getvvSlice()))
fmt.Println(s.Data[0].getvvSlice())
s.Data[0].a = vvvs
fmt.Printf("%p, len:%d, cap:%d \n", s.Data[0].a, len(s.Data[0].getvvSlice()), cap(s.Data[0].getvvSlice()))
fmt.Println(s.Data[0].getvvSlice())
```
```go
0xc042010140
[0xc042008240]
vvvs.poriner1: 0xc042010140
vvvs: [0xc042008240 0xc042008290]
vvvs.poriner2: 0xc042010140, len:2, cap:10
0xc042010140, len:1, cap:10
[0xc042008240]
0xc042010140, len:2, cap:10
[0xc042008240 0xc042008290]
```
vvvs的len改变了,但是s.Data[0].a的len没有改变,数据是插入进去的,但是因为len=1,所以看不到。
#1