首页 >后端开发 >Golang >Go 的类型断言和类型切换慢吗?

Go 的类型断言和类型切换慢吗?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-09 09:22:08907浏览

Are Go's Type Assertions and Type Switches Slow?

Go 中的类型发现性能:类型断言/类型切换慢吗?

Go 中,运行时的类型发现可以通过类型来实现断言或类型开关。当类型断言执行直接转换时,类型切换会与类型信息进行比较。在 C/C 中,运行时类型发现通常被认为很慢,导致使用类型成员比较作为解决方法。

通过基准测试评估性能

评估Go 中类型发现机制的性能,我们进行了基准测试:http://play.golang.org/p/E9H_4K2J9-。该测试比较了四种方法:

  • BenchmarkIntmethod:直接调用已知类型的方法
  • BenchmarkInterface:通过接口
  • BenchmarkTypeSwitch:使用类型开关来识别和调用方法
  • BenchmarkTypeAssertion:使用类型断言来识别和调用方法

基准结果

编辑:2019 年 10 月 9 日

Go v1.12.9 在 AMD R7 2700X 上的最新结果表明,四种方法的性能大致相同:

BenchmarkIntmethod-16           2000000000           1.67 ns/op
BenchmarkInterface-16           1000000000           2.03 ns/op
BenchmarkTypeSwitch-16          2000000000           1.70 ns/op
BenchmarkTypeAssertion-16       2000000000           1.67 ns/op

之前的结果:一月2015 年 1 月 19 日

在 amd64 机器上,较旧的结果显示类型切换和类型断言比直接方法调用或接口方法调用慢:

BenchmarkIntmethod  1000000000           2.71 ns/op
BenchmarkInterface  1000000000           2.98 ns/op
BenchmarkTypeSwitch 100000000           16.7 ns/op
BenchmarkTypeAssertion  100000000       13.8 ns/op

结论

根据这些结果,可以得出结论:类型断言和类型与其他类型检查方法相比,Go 中的开关不会造成显着的性能损失。因此,选择最合适的方法取决于代码可读性和维护偏好等因素。

以上是Go 的类型断言和类型切换慢吗?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn