为了账号安全,请及时绑定邮箱和手机立即绑定

是否使用指针定义golang struct函数

是否使用指针定义golang struct函数

Go
慕桂英4014372 2021-08-10 16:12:54
有人可以向我解释为什么在执行此操作时附加到数组会起作用: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的值。如果要覆盖不属于底层数据区的任何内容,则需要传递指向切片的指针或返回修改后的切片。


查看完整回答
反对 回复 2021-08-10
  • 3 回答
  • 0 关注
  • 195 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信