有人可以向我解释为什么在执行此操作时附加到数组会起作用:func (s *Sample) Append(name string) { d := &Stuff{ name: name, } s.data = append(s.data, d)}但当你这样做时就不会:func (s Sample) Append(name string) { d := &Stuff{ name: name, } s.data = append(s.data, d)}您是否有任何理由想要使用第二个示例。
3 回答
aluckdog
TA贡献1847条经验 获得超7个赞
Go slice 是一个棘手的野兽。在内部,切片类型(如[]int)的变量如下所示:
struct {
data *int // pointer to the data area
len int
cap int
}
当您将切片传递给函数时,此结构是按值传递的,而底层数据区域(即data指向的内容)不会被复制。内建append()函数修改data区域(或产生新的一个),并返回与更新一个新的切片len,data和cap的值。如果要覆盖不属于底层数据区的任何内容,则需要传递指向切片的指针或返回修改后的切片。
- 3 回答
- 0 关注
- 195 浏览
添加回答
举报
0/150
提交
取消