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)
。这对于检查错误“实际上”是什么类型的错误非常有用,如果它实现了包特定的接口,那么您可以使用它公开的行为(即)。