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
有其自己的方法(實際上,它是一個接口)。它還會將語言規範與標準庫結合起來,從而降低兩者的靈活性。