使用指针是内存/处理器最有效的方法来传递结构以进行修改,例如below还是有更好的方法?
答案 0 :(得分:1)
基本上有两种方法可以将参数传递给函数或方法:通过 value 和 address (指针)。
按值传递参数会生成传递值的副本,因此如果要修改它,则会修改副本而不是原始值。因此,如果您想修改原始值,那么只留下传递地址选项。
备注:强>
请注意,您还可以传递值并返回修改后的副本并将返回的修改后的值分配给变量,但显然效率较低 - 特别是如果结构很大(包含许多字段)。
在极少数情况下,可能会有更有效的方法来传递修改值,但我宁愿将这些案例命名为"表示" 而不是传递。让我们假设你有一个全局变量,是一个结构片。在这种情况下,您只需传递要修改的切片中的值的索引即可。并且您的函数可以只修改由传递的索引值表示的元素的字段。如果你只想修改1个字段,这可能会更快,在32位架构上,索引值的大小可能小于指针,这样你就可以省去地址获取和解除引用操作(需要基准测试)。但是这个功能的可用性会急剧下降,所以我不推荐这个。
当你需要修改它时,会留下指针传递的最佳方式。
答案 1 :(得分:0)
在Go中,使用指针传递结构以进行修改是惯用的方法。没有其他语言的参考变量。因此传递指针是现在最有效的方法,因为它是惯用的,所以在Go的未来版本中也很可能如此。