Golang:动态地将接口转换为类型变量
Golang: cast an interface to a typed variable dynamically
在 go 中,是否可以通过某种方式动态转换变量?
例如,如果一个简单的转换为:
var intAge = interfaceAge.(int)
如果我事先不知道年龄是整数怎么办?一种简单的写法是
var x = getType()
var someTypeAge = interfaceAge(.x)
有没有办法实现这样的目标? reflect 包提供了一些在运行时确定或转换类型的方法——但我找不到类似上面提到的任何东西(适用于所有类型的通用方案)。
不,你不能。 Go 是一种静态类型语言。变量的类型在编译时确定。
如果您想动态确定 interface{}
的 type
,您可以使用 type switching:
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
}
在 go 中,是否可以通过某种方式动态转换变量?
例如,如果一个简单的转换为:
var intAge = interfaceAge.(int)
如果我事先不知道年龄是整数怎么办?一种简单的写法是
var x = getType()
var someTypeAge = interfaceAge(.x)
有没有办法实现这样的目标? reflect 包提供了一些在运行时确定或转换类型的方法——但我找不到类似上面提到的任何东西(适用于所有类型的通用方案)。
不,你不能。 Go 是一种静态类型语言。变量的类型在编译时确定。
如果您想动态确定 interface{}
的 type
,您可以使用 type switching:
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
}