预先存储对指针的引用与在移动中引用指针之间的区别

时间:2018-03-06 03:59:51

标签: pointers go reference

首先,希望问题的标题是有意义的(随意建议编辑)。我以前从未处理过手动指针,只是学习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是什么?很可能是一个结构,或者可能是一个接口或可能是任何东西(我知道某些组件,如地图,字符串,函数,结构等,默认情况下通过引用传递。但我仍然想知道那些组件是不是)。

1 个答案:

答案 0 :(得分:2)

如果Errors位于*thing for err := range thing.Errors() { ... },那么您可以使用build.gradle

因为the method set,问题中的两个片段与我在此答案中的建议之间的表现应该没有差异。