インスタンスを持たない TypeOf: 結果を関数に渡す
Go では、インスタンスを持たずに「Type」を取得することが可能ですそのタイプの。これは、reflect.TypeOf() を使用することで実現できますが、通常、例にはインスタンスが含まれます。
インスタンスを使用せずに型を取得する
インスタンスを使用せずに「型」を取得するにはインスタンスの場合、秘訣は、「型付き」 nil を割り当てることができる型へのポインターから始めることです。その後、.Elem() を使用して、基本型として知られる、ポイントされた型の Reflect.Type 記述子を取得できます。
<code class="go">t := reflect.TypeOf((*int)(nil)).Elem() fmt.Println(t) t = reflect.TypeOf((*http.Request)(nil)).Elem() fmt.Println(t) t = reflect.TypeOf((*os.File)(nil)).Elem() fmt.Println(t)</code>
出力例:
int http.Request os.File
型の受け渡し
型を渡してスイッチで使用する必要がある場合は、参照用にグローバル変数を作成して保存します:
<code class="go">var ( intType = reflect.TypeOf((*int)(nil)) httpRequestType = reflect.TypeOf((*http.Request)(nil)) osFileType = reflect.TypeOf((*os.File)(nil)) int64Type = reflect.TypeOf((*uint64)(nil)) ) 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") case int64Type: fmt.Println("Type: uint64") default: fmt.Println("Type: Other") } } func main() { printType(intType) printType(httpRequestType) printType(osFileType) printType(int64Type) }</code>
簡略化されたアプローチ
比較目的のみに型を利用している場合は、reflect の代わりに定数を使用することを検討してください。Type:
<code class="go">type TypeDesc int const ( typeInt TypeDesc = iota typeHttpRequest typeOsFile typeInt64 ) 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") case typeInt64: fmt.Println("Type: uint64") default: fmt.Println("Type: Other") } } func main() { printType(typeInt) printType(typeHttpRequest) printType(typeOsFile) printType(typeInt64) }</code>
以上がGoでインスタンスのない型を取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。