Go 中的类型断言和类型开关:性能注意事项
在 Go 中,类型断言和类型开关提供了运行时类型发现机制。然而,与 C/C 中的类型成员比较等方法相比,人们对它们的性能表示担忧。
为了评估它们的影响,进行了基准测试来比较这些方法的速度:
package main import ( "testing" ) type myint int64 type Inccer interface { inc() } func (i *myint) inc() { *i = *i + 1 } func BenchmarkIntmethod(b *testing.B) { i := new(myint) incnIntmethod(i, b.N) } func BenchmarkInterface(b *testing.B) { i := new(myint) incnInterface(i, b.N) } func BenchmarkTypeSwitch(b *testing.B) { i := new(myint) incnSwitch(i, b.N) } func BenchmarkTypeAssertion(b *testing.B) { i := new(myint) incnAssertion(i, b.N) } // Remaining helper functions...
AMD R7 2700X 机器(Go v1.12.9)上的结果表明,所有方法都有类似的结果性能:
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 年在 amd64 机器上的结果相比,与直接方法调用或接口访问相比,使用类型开关或断言时没有观察到明显的速度下降。
总体而言,Go 中类型断言和切换的性能已显着提高,现在可与其他类型检查方法相媲美。因此,您可以在代码中使用它们,而不必担心严重的性能损失。
以上是与其他类型检查方法相比,Go 的类型断言和类型开关表现如何?的详细内容。更多信息请关注PHP中文网其他相关文章!