【问题标题】:Difference between storing reference to pointer beforehand vs referencing pointer on-the-go预先存储对指针的引用与在运行中引用指针之间的区别
【发布时间】:2018-08-13 20:35:03
【问题描述】:

首先,希望问题的标题有意义(请随时提出修改建议)。以前没手动处理过指针,刚学Go。

所以,正在做以下事情:

func something() {
  something := *thing
  go func() {
    for err := range something.Errors() {
      fmt.Println(err)
    }
  }()
}

...有任何优势:

func something() {
  go func() {
    for err := range (*thing).Errors() {
      fmt.Println(err)
    }
  }()
}

请注意,我已经尝试在第二种情况下执行 *thing.Errors(),但它会给我错误,除非我在它周围加上大括号(这是可以理解的,因为 Errors() 方法不返回任何指针,我猜?)。


虽然这是我通常不会关心的微优化,但出于学习和好奇心的目的,第二种情况不会有更多的性能开销(因为它在每次迭代时都引用指针)?

你问thing 是什么?很可能是一个结构,或者可能是一个接口,也可能是任何东西(我知道某些组件,如映射、字符串、函数、结构等,默认情况下是通过引用传递的。但我仍然想知道那些组件不是)。

【问题讨论】:

    标签: pointers go reference


    【解决方案1】:

    如果Errorsthe method set 中对应*thing,那么您可以使用for err := range thing.Errors() { ... }

    因为range expression is evaluated once at the beginning of the loop,问题中的两个sn-ps和我在这个答案中的建议在性能上应该没有区别。

    【讨论】:

      猜你喜欢
      • 2010-12-26
      • 2011-03-14
      • 2010-10-19
      • 1970-01-01
      • 2016-01-12
      • 2020-04-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多