切片的坑特别多

mlzhou · · 3079 次点击
```go testList := []uint16{1, 2, 3, 4} fmt.Printf("%p\n", &testList) myTest := &testList //1.mytest 和 testList指向同一段 fmt.Printf("%p\n", myTest) *myTest = append(*myTest, 9) //分离指向,所以在设计的时候最好给一个cap,不需要频繁的开辟内存 fmt.Printf("%p\n", &myTest) (*myTest)[0] = 9 fmt.Println(testList) fmt.Println(*myTest) 0xc21000a020 0xc21000a020 0xc210000020 [9 2 3 4 9] [9 2 3 4 9] ``` 你是想要这个么?你如果想真正复用内存,就应该使用指针, 否则是做不到真正的复用的,在append之后不是改了原来复用内存的大小而是复制了一个全新的内存区域,而且频繁的开辟内存也不是什么坏事, 因为小对象在栈上的申请内存不需要GC回收.这样没啥不对,或许是为了内存安全.也许我确实不懂你在说什么,也难怪你不知道我在说什么...
#6
更多评论
这算什么坑, go本来就是值复制, 不是引用复制. 这是基础问题,不是所谓的坑.
#1
<a href="/user/focusonline" title="@focusonline">@focusonline</a> 那请问range多重map[]map[]val呢,不注意么?
#2