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