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

有人可以向我解释为什么在执行此操作时附加到数组会起作用:


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)

}

您是否有任何理由想要使用第二个示例。


慕桂英4014372
浏览 196回答 3
3回答

aluckdog

Go slice 是一个棘手的野兽。在内部,切片类型(如[]int)的变量如下所示:struct {    data *int // pointer to the data area    len  int    cap  int}当您将切片传递给函数时,此结构是按值传递的,而底层数据区域(即data指向的内容)不会被复制。内建append()函数修改data区域(或产生新的一个),并返回与更新一个新的切片len,data和cap的值。如果要覆盖不属于底层数据区的任何内容,则需要传递指向切片的指针或返回修改后的切片。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go