我想通过使用struct / interface的字符串名称值将特定变量转换为特定的已定义struct / interface。
例如:
type Testing interface{}
和新变量
stringName := "Testing" newTestingVariable.(stringName)
这可能是偶然的吗?也许使用反射?
干杯
这不可能。Go是一种静态类型的语言,这意味着必须在编译时知道变量和表达式的类型。
在类型断言中:
x.(T) […]如果类型断言成立,则表达式的值为存储在其中的值x,其类型为T。
x.(T)
[…]如果类型断言成立,则表达式的值为存储在其中的值x,其类型为T。
x
T
因此,您可以使用类型断言来获取(或测试)您指定的类型的值。
什么时候做:
会是什么 类型 的类型声明的结果?你没说 您指定了一个string包含类型名称的值,但这只能在 运行时确定 。(是的,在上面的示例中,编译器可以跟踪作为常量值给出的值,但是在一般情况下,这在编译时是不可能的。)
string
因此,在编译时,编译器只能将其interface{}用作类型表达式结果的类型,那么又有什么意义呢?
interface{}
如果要动态地测试x的类型T(或者接口值是否x实现T),则可以对该类型(包reflect)使用反射。在这种情况下,您将使用a reflect.Type来指定要测试的类型,而不是string其名称的表示形式。
reflect
reflect.Type