gpt4 book ai didi

go - Go 接口(interface)如何支持类型信息?

转载 作者:数据小太阳 更新时间:2023-10-29 03:37:10 27 4
gpt4 key购买 nike

来自https://research.swtch.com/interfaces :“要检查接口(interface)值是否包含特定类型,如上面的类型转换,Go 编译器生成等效于 C 表达式 s.tab->type 的代码以获取类型指针并根据所需类型检查它。”

什么是类型指针以及在这个例子中切换类型的开销是多少https://play.golang.org/p/2HIOtPOB1w

type St struct {
x int
}

func main() {
var i interface{}
i = 12

switch i.(type) {
case int:
fmt.Println("int")
case St:
fmt.Println("St")
}
}

在性能方面,类型切换(或类型断言)与 ValueOf 相比如何?我什么时候使用后者而不是前者?

最佳答案

要回答有关类型开关开销的问题:

我在我编写的脚本语言中使用开关来区分值结构中的基础类型。最初,我存储了一个整数类型常量并打开了它。后来我很好奇,并改为使用类型开关进行测试。两个版本具有相同的性能。

这是有道理的,因为 AFAIK,接口(interface)中的类型存储为一个简单的整数常量(它可能是指向具有更多信息的内部数据结构的指针,但这与简单的类型检查无关)。

换句话说,别担心,它和打开任何整数一样快。

我不能保证反射的性能,但我敢打赌,使用反射进行类型切换比仅使用类型切换要慢得多。

关于go - Go 接口(interface)如何支持类型信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46352728/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com