Go 源码中对于 slice 的声明是这样的:
type slice struct {
array unsafe.Pointer
len int
cap int
}
并且切片还是一个指针,所以可以认为 s := make([]string, 10) 约等于 s := &slice{}。
那 append 方法既然接收 *slice 作为参数,为什么还会返回一个新的 slice 呢?它完全可以修改当前的 slice 呀,再创建一个 *slice 返回不是会产生更多的内存申请和释放吗?