インスタンスを持たない TypeOf
Go を使用する場合、既存のインスタンスを持たずに型の表現を取得すると便利です。これは、リフレクション手法を使用して実現できます。
型付き Nil で TypeOf を利用する
核心は、目的の型へのポインターから開始して、それを nil にキャストすることにあります。これにより、型付き nil 値が作成され、Elem() メソッドを使用して基本型にアクセスできるようになります。
<code class="go">t := reflect.TypeOf((*int)(nil)).Elem() fmt.Println(t) // Output: int</code>
使用例
説明するには、次のことを考えてください。 ParamReader struct:
<code class="go">type ParamReader struct { // The request from which to extract parameters context *http.Request } func (p *ParamReader) Require(s string, t reflect.Type) { // Validation logic omitted for brevity }</code>
Require() メソッド内で、型付き nil ポインタを指定したreflect.TypeOf() を利用してパラメータの型を確認できます:
<code class="go">if( t == reflect.TypeOf((*uint64)(nil)) { // Validation logic for uint64 }</code>
Alternative withカスタム タイプ
生の型を渡す代わりに、特定の型をカプセル化するカスタム タイプを使用すると便利です。これは、単純な列挙型の構造で実現できます。
<code class="go">type TypeDesc int const ( TypeInt TypeDesc = iota TypeHttpRequest TypeOsFile TypeInt64 )</code>
定数の利用
効率を高めるため、型を動的に作成するのではなく、事前定義された定数を使用することをお勧めします。
<code class="go">const ( TypeInt int = iota TypeHttpRequest TypeOsFile TypeInt64 )</code>
結論
リフレクション手法と型付き nil 値の戦略的使用を活用することで、インスタンスなしで Type 記述子を取得できます。これにより、ParamReader の例で示されているように、実行時の型のチェックと検証のさまざまな可能性が開かれます。
以上がインスタンスを使用せずに Go で型記述子を取得する方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。