Go语言 如何动态地将接口强制转换为类型化变量

cnh2zyt3  于 2023-04-18  发布在  Go
关注(0)|答案(1)|浏览(144)

在Go中,是否可以以某种方式动态地转换变量?
例如,如果一个简单的强制转换是:

var intAge  = interfaceAge.(int)

如果我事先不知道age是一个int,那该怎么办呢?

var x = getType()
var someTypeAge = interfaceAge(.x)

reflect包提供了一些在运行时确定或强制转换类型的方法-但我找不到任何类似于上面提到的方法(一个通用的方案,适用于所有类型)。

rdlzhqv9

rdlzhqv91#

不可以。Go是一种静态类型语言。变量的类型是在编译时确定的。
如果你想动态地确定一个interface{}type,你可以使用类型切换:

var t interface{}
t = functionOfSomeType()
switch t := t.(type) {
default:
    fmt.Printf("unexpected type %T", t)       // %T prints whatever type t has
case bool:
    fmt.Printf("boolean %t\n", t)             // t has type bool
case int:
    fmt.Printf("integer %d\n", t)             // t has type int
case *bool:
    fmt.Printf("pointer to boolean %t\n", *t) // t has type *bool
case *int:
    fmt.Printf("pointer to integer %d\n", *t) // t has type *int
}

相关问题