首先,希望问题的标题有意义(随时提出修改建议)。我以前从来没有手动处理过指针,只是学习 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
,你问?很可能是一个结构,或者可能是一个接口(interface)或任何东西(我知道某些组件,如映射、字符串、函数、结构等,默认情况下是通过引用传递的。但我仍然想知道那些组件是不是)。
最佳答案
如果 Errors
在 the method set 中对于 *thing
然后你可以使用 for err := range thing.Errors() { ... }
。
因为 range expression is evaluated once at the beginning of the loop ,问题中的两个片段和我在此答案中的建议之间的性能应该没有差异。
关于pointers - 预先存储对指针的引用与在移动中引用指针之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49123156/