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

标签 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,你问?很可能是一个结构,或者可能是一个接口(interface)或任何东西(我知道某些组件,如映射、字符串、函数、结构等,默认情况下是通过引用传递的。但我仍然想知道那些组件是不是)。

最佳答案

如果 Errorsthe 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/

相关文章:

Android Library Project 作为已编译的 JAR 库

go - 在反射模式下使用mockgen

pointers - 运行时错误: invalid memory address or nil pointer dereference in public pointer

reference - 我什么时候使用浅拷贝?

c - 将节点添加到树问题

go - 如何更新golang cockroachdb中jsonb的几个字段

C++ 指向 const 的指针

c++ - 调用指向成员函数的模板指针

c++ - 管理未动态分配的内存

c - 当我从函数中更改它时,为什么 `src` 没有更改?