假设一个Go 1.18
的程序有quite heavy个struct
,对它来说,复制被认为是昂贵的:
type MyStruct struct {
P string
// a lot of properties
}
现在让我们定义一个函数,将slice个这样的元素作为输入参数,其目标是更新每个切片元素的属性:
func myFunc(sl []MyStruct) {
for i := range sl {
p := &sl[i] // <-- HERE
p.P = "bar"
// other properties mutations
}
}
在<-- HERE
标记处,Golang编译器是将片元素的temporary copy放入循环的作用域,还是获取片元素in-place的地址?
这样做是为了避免复制整个切片元素.