Pointers 何时使用指针

Pointers 何时使用指针,pointers,struct,go,Pointers,Struct,Go,我对Go语言是新手,在C/C++方面的背景很差,所以我很自然地在思考什么时候使用指针,什么时候不使用指针。尽管这个问题可能被认为是开放式的,但我想知道关于何时返回结构和何时返回指针(以及何时等效地接受结构/指针作为参数)的一些指导原则 据我猜测,以下说法是正确的: 结构通过值传递到函数中。也就是说,在将结构传递到函数中时,会生成结构的副本 如果我想通过引用传递结构,那么我将在函数定义中使用指针参数,并在调用函数时使用addressof运算符 我希望通过引用传入结构的原因是,我传入的结构很大,按值

我对Go语言是新手,在C/C++方面的背景很差,所以我很自然地在思考什么时候使用指针,什么时候不使用指针。尽管这个问题可能被认为是开放式的,但我想知道关于何时返回结构和何时返回指针(以及何时等效地接受结构/指针作为参数)的一些指导原则

据我猜测,以下说法是正确的:

  • 结构通过值传递到函数中。也就是说,在将结构传递到函数中时,会生成结构的副本
  • 如果我想通过引用传递结构,那么我将在函数定义中使用指针参数,并在调用函数时使用addressof运算符
  • 我希望通过引用传入结构的原因是,我传入的结构很大,按值传入(不太可能)会对内存造成负担,或者我希望对传入的副本进行更改(更有可能)
  • 作为3.)的推论,我应该按值传递,除非我有上述通过引用传递的原因之一

  • 我的假设正确吗?还是我遗漏了指针上的标记?

    你的假设是正确的。关于#3,Go是并发语言,在goroutines中通过引用传递使它们都阅读相同的结构,这是安全的,但也使它们修改相同的结构,这是危险的。

    基本上就是这样——我不确定你问的是否不仅仅是一个肯定或否定的问题。Re:#2,最好记住Go中的所有内容都是按值传递的,在这种情况下,您将按值传递指针。这本质上是一个是/否问题,但如果是一个否问题,那么我会想知道哪里出了问题。谢谢你的意见。对于2,说指针按值传递是正确的吗?但是我们使用该指针来修改它指向的对象,但是如果我们传入一个结构(而不是指向该结构的指针),那么我们将只能修改副本?是的,对于第二个,您的注释是正确的。指针按值传递,但允许您访问它指向的对象。如果接收方是结构而不是结构指针,则该方法将在副本上操作。