我是否只需要考虑性能指标?

时间:2019-04-18 16:31:42

标签: pointers go

struct实例在即将更改或打算共享时(例如文件,句柄等)必须作为指针传递。但是,如果我不希望出现这种情况(例如,对于DTO),我是否真的仅出于性能原因才需要关心副本?

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

1 个答案:

答案 0 :(得分:4)

有时性能提升是明显的和必要的,有时不是。确定数据的位置(相对于堆栈还是堆而言)要比使用C和C ++之类的语言更难确定,并且同样难以确定性能。通常,您需要对性能进行更深入的研究,以获取见解,而不是仅仅猜测可能有哪些性能更​​好。

如果我是您,我将针对您所引用的任何功能运行一些基准测试,一次通过按引用传递结构(指针),另一次通过按值传递结构(将其复制)。基准测试将使该功能运行足够的时间,以获取您可以依靠的系统指标和处理时间的平均值。

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