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

问题描述 投票:-1回答:1

首先,希望问题的标题是有意义的(随意建议编辑)。我以前从未处理过手动指针,只是学习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个回答
2
投票

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

因为range expression is evaluated once at the beginning of the loop,问题中的两个片段和我在这个答案中的建议之间应该没有性能差异。

© www.soinside.com 2019 - 2024. All rights reserved.