如何在 Golang 运行时动态转换类型?
How can I convert type dynamically in runtime in Golang?
这是我的例子:
http://play.golang.org/p/D608cYqtO5
基本上我想这样做:
theType := reflect.TypeOf(anInterfaceValue)
theConvertedValue := anInterfaceValue.(theType)
符号
value.(type)
被称为type-assertion。断言中的 type
必须在编译时已知,并且它始终是类型名称。
在您的游乐场示例中,SetStruct2
可以使用 type-switch 来处理其第二个参数的不同类型:
switch v := value.(type) {
case Config:
// code that uses v as a Config
case int:
// code that uses v as an int
}
但是,您不能断言接口是动态的(就像在您的代码中一样)。因为否则编译器无法对您的程序进行类型检查。
编辑:
I don't want to case them one by one if there is another way to do so?
您可以使用 reflection 进行与类型无关的工作。然后你可以在值上随机设置东西,但是如果你对一个类型执行非法操作它会恐慌。
如果您想从编译器的类型检查中获益,则必须列举不同的情况。
这是我的例子: http://play.golang.org/p/D608cYqtO5
基本上我想这样做:
theType := reflect.TypeOf(anInterfaceValue)
theConvertedValue := anInterfaceValue.(theType)
符号
value.(type)
被称为type-assertion。断言中的 type
必须在编译时已知,并且它始终是类型名称。
在您的游乐场示例中,SetStruct2
可以使用 type-switch 来处理其第二个参数的不同类型:
switch v := value.(type) {
case Config:
// code that uses v as a Config
case int:
// code that uses v as an int
}
但是,您不能断言接口是动态的(就像在您的代码中一样)。因为否则编译器无法对您的程序进行类型检查。
编辑:
I don't want to case them one by one if there is another way to do so?
您可以使用 reflection 进行与类型无关的工作。然后你可以在值上随机设置东西,但是如果你对一个类型执行非法操作它会恐慌。
如果您想从编译器的类型检查中获益,则必须列举不同的情况。