沒有實例的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中文網其他相關文章!