6

Go でリフレクション ライブラリを使用して、型の名前からその表現に移動する方法はありますか?

ユーザーがコード生成のために型表現を提供する必要があるライブラリがあります。そのタイプの変数を作成してTypeOf 関数を呼び出すだけでよいため、(ある意味で)可能であるに違いないことはわかっていますが、これを回避して名前から表現を取得する方法はありますか?

4

1 に答える 1

7

質問は明確ではありません。2 つの方法で解釈できます。答えはノーです。不可能です。答えが「はい」の場合は、可能です。

実行時

型名がstring値として提供される場合、明示的に参照されていない型は最終的な実行可能バイナリにコンパイルされない可能性があるため、実行時にそれは不可能です (したがって、実行時に明らかに到達不能になり、「不明」になります)。詳細については、 クライアント/サーバー コードの分割を参照してください。可能な回避策については、Golang で特別なプレフィックスまたはサフィックスを使用してすべての関数を呼び出すを参照してください。

「コーディング」時

「コーディング」時間(ソースコードの作成/生成)について話している場合、指定された型の変数を作成/割り当て、変数を呼び出しreflect.TypeOf()て渡すことなく可能です。

型へのポインターから開始し、型付きnilポインター値を割り当てなしで使用できます。また、 を使用して、そのreflect.Type記述子からポインターの基本型 (または要素型) の記述子に移動できますType.Elem()

これは次のようになります。

t := reflect.TypeOf((*YourType)(nil)).Elem()

上記の型記述子は、以下tと同じになりt2ます。

var x YourType
t2 := reflect.TypeOf(x)

fmt.Println(t, t2)
fmt.Println(t == t2)

上記のアプリケーションの出力 ( Go Playgroundで試してください):

main.YourType main.YourType
true
于 2016-11-30T07:52:13.117 に答える