Reflection 如何在Golang的运行时动态转换类型?

Reflection 如何在Golang的运行时动态转换类型?,reflection,go,runtime,Reflection,Go,Runtime,以下是我的例子: 基本上我想这样做: theType := reflect.TypeOf(anInterfaceValue) theConvertedValue := anInterfaceValue.(theType) 符号 value.(type) 被称为a。断言中的类型必须在编译时已知,并且它始终是一个类型名 在您的示例中,SetStruct2可以使用来处理其第二个参数的不同类型: switch v := value.(type) { case Config: // code

以下是我的例子:

基本上我想这样做:

theType := reflect.TypeOf(anInterfaceValue)
theConvertedValue := anInterfaceValue.(theType)
符号

value.(type)
被称为a。断言中的
类型
必须在编译时已知,并且它始终是一个类型名

在您的示例中,
SetStruct2
可以使用来处理其第二个参数的不同类型:

switch v := value.(type) {
case Config:
    // code that uses v as a Config
case int:
    // code that uses v as an int
}
但是,您不能断言接口是动态的(比如在代码中)。因为否则编译器无法对您的程序进行类型检查

编辑:

如果有别的办法,我不想一个接一个地给他们打官司

您可以使用以不可知的方式工作类型。然后可以在值上随机设置stuff,但如果对类型执行非法操作,它将死机

如果您想从编译器的类型检查中获益,您必须枚举不同的情况。

符号

value.(type)
被称为a。断言中的
类型
必须在编译时已知,并且它始终是一个类型名

在您的示例中,
SetStruct2
可以使用来处理其第二个参数的不同类型:

switch v := value.(type) {
case Config:
    // code that uses v as a Config
case int:
    // code that uses v as an int
}
但是,您不能断言接口是动态的(比如在代码中)。因为否则编译器无法对您的程序进行类型检查

编辑:

如果有别的办法,我不想一个接一个地给他们打官司

您可以使用以不可知的方式工作类型。然后可以在值上随机设置stuff,但如果对类型执行非法操作,它将死机


如果你想从编译器的类型检查中获益,你必须列举不同的情况。

做这种事情的目的是
value.(type)
是我可能有很多结构,比如
Config1
Config100
,如果有其他方法,我不想一个接一个地
case
它们。如果你只是想检查类型,或者断言它以使用它,你可以只做
val,ok:=value。(typeicareaabout)
。这对于检查错误“实际上”是什么类型的错误非常有用,如果它实现了特定于包的接口,那么您可以使用它公开的行为(即)。这样做的目的是
value.(type)
我可能有许多类似
Config1
的结构
Config100
,如果有其他方法,我不想一个接一个地
case
它们。如果你只是想检查类型,或者断言它以使用它,你可以只做
val,ok:=value。(typeicareaabout)
。这对于检查错误“实际上”是什么类型的错误非常有用,如果它实现了包特定的接口,那么您可以使用它公开的行为(即)。