由 append 引发的一个疑问 [draft]
由 append 引发的一个疑问 我们先来看一个问题 package main import "fmt" func main() { a := make([]int, 0, 5) AddElm(a, 5) fmt.Println(a) } func AddElm(a []int, i int) { a = append(a, i) } 上面这一段代码中,a 这个切片会输出什么呢?可以试着运行一下 答案是空切片,为什么呢?首先我们知道 append 这个操作,在容量足够的情况下是不会新生成一个 slice 来进行扩容的,所以这里排除这种情况。 已知这个 slice 也是值传递的方式传入的,那么是不是因为他 copy 了一份数据到函数内部从而导致的函数内外不一致的情况呢?我们打印地址看一下 package main import "fmt" func main() { a := make([]int, 0, 5) fmt.Printf("before: %p\n", a) AddElm(a, 5) fmt.Printf("after: %p\n", a) fmt.Println(a) } func AddElm(a []int, i int) { a = append(a, i) fmt....