【问题标题】:When to use pointers [duplicate]何时使用指针[重复]
【发布时间】:2016-03-31 02:43:16
【问题描述】:

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

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

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

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

【问题讨论】:

  • 基本上就是这样——我不确定你问的不仅仅是是或否的问题。回复:#2,请记住,Go 中的 所有内容 都是按值传递的,在这种情况下,您将按值传递指针。
  • 这本质上是一个是/否的问题,但如果它是一个否,那么我会想知道哪里出了问题。感谢您的输入。对于2,说指针按值传递是否正确,但是我们使用该指针来修改它指向的对象,但是如果我们传入一个结构(而不​​是指向该结构的指针),那么我们将只能修改副本?
  • 是的,第二个你的评论是正确的。指针是按值传递的,但允许您访问它指向的东西。如果你的接收者是一个结构体而不是一个结构体指针,那么该方法将在一个副本上运行。

标签: pointers struct go


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2017-01-07
    • 2021-06-28
    • 1970-01-01
    • 2018-04-22
    • 1970-01-01
    • 2018-11-03
    • 2010-10-27
    • 1970-01-01
    相关资源
    最近更新 更多