0

struct当实例即将更改或打算共享时(例如文件、句柄等),需要将实例作为指针传递。但是,如果我不期望这些(例如,对于 DTO),我真的只需要出于性能原因而关心副本吗?

这个问题不等同于Pointers vs. values in parameters 和 return values,因为这没有解决基于性能问题的值/指针语义之间的选择。

4

1 回答 1

4

有时,性能提升是明显且必要的,有时则不是。数据的位置(根据堆栈与堆)比在 C 和 C++ 等语言中更难确定,同样,性能也很难确定。性能通常是您需要更深入地挖掘以获得洞察力的东西,而不是纯粹猜测什么可能会或可能不会更高效。

如果我是你,我会针对你所指的任何函数运行一些基准测试,一次是通过引用(指针)传递结构,另一次是通过值传递它(它被复制)。基准测试将运行该函数足够的时间,以获得您可以依赖的系统指标和处理时间的平均值。

这是有关如何在 Go 中创建和运行基准的相关指南(它是内置的) - https://dave.cheney.net/2013/06/30/how-to-write-benchmarks-in-go

于 2019-04-18T17:15:10.583 回答