インスタンスを持たない型の取得
Go では、型のインスタンスを所有せずに、reflect.Type を取得することができます。重要なのは、Elem() メソッドを利用して、型へのポインターから基本型に上昇することにあります。
<code class="go">t := reflect.TypeOf((*int)(nil)).Elem() fmt.Println(t) // Output: int</code>
このアプローチは、以下に示すように、さまざまな型に適用できます。
<code class="go">httpRequestType := reflect.TypeOf((*http.Request)(nil)).Elem() osFileType := reflect.TypeOf((*os.File)(nil)).Elem()</code>
さらに、簡単に参照できるようにこれらの型を保存するグローバル変数を作成することもできます。
<code class="go">var intType = reflect.TypeOf((*int)(nil)) var httpRequestType = reflect.TypeOf((*http.Request)(nil)) var osFileType = reflect.TypeOf((*os.File)(nil))</code>
これらのグローバル変数を使用すると、switch ステートメントを使用して型の比較を実行できます。
<code class="go">func printType(t reflect.Type) { switch t { case intType: fmt.Println("Type: int") case httpRequestType: fmt.Println("Type: http.request") case osFileType: fmt.Println("Type: os.file") default: fmt.Println("Type: Other") } }</code>
<code class="go">printType(intType) // Output: Type: int</code>
reflect.Type を使用する代わりに、定数型定義を作成できます:
<code class="go">type TypeDesc int const ( TypeInt TypeDesc = iota TypeHttpRequest TypeOsFile ) func printType(t TypeDesc) { switch t { case TypeInt: fmt.Println("Type: int") case TypeHttpRequest: fmt.Println("Type: http.request") case TypeOsFile: fmt.Println("Type: os.file") default: fmt.Println("Type: Other") } }</code>
以上がリフレクトを取得する方法。インスタンスなしで Go と入力しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。