何时使用指针



我是Go语言的新手,在C/C++方面的背景知识很少,所以我很自然地在纠结什么时候使用指针,什么时候不使用指针。虽然这个问题可能被认为是开放式的,但我想知道关于何时返回结构和何时返回指针(以及何时接受结构/指针作为参数)有什么指导方针。

根据我的猜测,以下陈述成立:

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

我的假设正确吗?还是我错过了指针上的标记?

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

最新更新