猿问

Golang:动态地将接口​​转换为类型化变量

在 go 中,是否可以以某种方式动态转换变量?


例如,如果一个简单的演员表是:


var intAge  = interfaceAge.(int)

如果我事先不知道 age 是 int 怎么办?一种简单的写法是


var x = getType()

var someTypeAge = interfaceAge(.x)

有没有办法实现这样的目标?反射包提供了一些在运行时确定或转换类型的方法 - 但我找不到像上面提到的任何东西(适用于所有类型的通用方案)。


米琪卡哇伊
浏览 151回答 1
1回答

一只萌萌小番薯

不,你不能。Go 是一种静态类型语言。变量的类型是在编译时确定的。如果你想动态确定type一个interface{}你可以使用类型切换:var t interface{}t = functionOfSomeType()switch t := t.(type) {default:    fmt.Printf("unexpected type %T", t)       // %T prints whatever type t hascase bool:    fmt.Printf("boolean %t\n", t)             // t has type boolcase int:    fmt.Printf("integer %d\n", t)             // t has type intcase *bool:    fmt.Printf("pointer to boolean %t\n", *t) // t has type *boolcase *int:    fmt.Printf("pointer to integer %d\n", *t) // t has type *int}
随时随地看视频慕课网APP

相关分类

Go
我要回答