【发布时间】:2019-12-16 13:12:25
【问题描述】:
如果可能的话,我正在尝试让我的代码更具执行性以节省内存
我做了一些研究,但找不到关于这个具体案例的任何信息。
func createSlice() []int {
return s[]int{1,2,3}
}
func main() {
s2 := createSlice()
}
s2 会是一个全新的切片,有自己的底层数组,还是指向 s 的底层数组的切片?
【问题讨论】:
-
您还没有找到有关切片如何工作的任何信息? blog.golang.org/go-slices-usage-and-internals、tour.golang.org/moretypes/7、golang.org/doc/effective_go.html#slices、gobyexample.com/slices。
s2是切片头的副本,引用相同的底层数组。 -
嗨 JimB,感谢您提供的资源!我读了其中一些,但我不明白它如何适用于我提到的案例。
-
它适用于所有情况。切片值是包含长度、容量和指向底层数组的指针的标头。赋值复制值,因此您会获得切片头的副本,其中包含指向同一底层数组的指针。该赋值是函数参数还是函数返回值或其他任何内容都没有关系。
-
谢谢阿德里安!帮助很大