首页 > 后端开发 > Golang > 与其他类型检查方法相比,Go 的类型断言和类型开关表现如何?

与其他类型检查方法相比,Go 的类型断言和类型开关表现如何?

DDD
发布: 2024-12-14 08:33:12
原创
819 人浏览过

How Do Go's Type Assertions and Type Switches Perform Compared to Other Type Checking Methods?

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板