4
有没有更好的方式来获得reflect.Type
的Go中的接口比reflect.TypeOf((*someInterface)(nil)).Elem()
?更好的方式来获取反射。在Go中的接口类型
它可以工作,但每当我滚过它时它会让我畏缩。
有没有更好的方式来获得reflect.Type
的Go中的接口比reflect.TypeOf((*someInterface)(nil)).Elem()
?更好的方式来获取反射。在Go中的接口类型
它可以工作,但每当我滚过它时它会让我畏缩。
不幸的是,没有。虽然它可能看起来很丑,但确实表达了获得所需所需的最少量信息。这些通常包含在var()
块中的文件顶部,包含所有这些必需类型,以便在程序初始化时计算它们,并且每次函数需要该值时不会导致查找惩罚。
这个成语整个标准库使用,例如:
html/template/content.go: errorType = reflect.TypeOf((*error)(nil)).Elem()
这样做的原因详细施工的事实,reflect.TypeOf
是一个库的一部分,而不是一个内置的,因此必须茎实际上是一个价值。
在某些语言中,类型的名称是可以用作表达式的标识符。 Go的情况并非如此。有效的表达式可以在in the spec找到。如果某个类型的名称也可用作reflect.Type
,则它会引入方法表达式的不明确性,因为reflect.Type
有其自己的方法(实际上,它是一个接口)。它还会将语言规范与标准库结合起来,从而降低两者的灵活性。