首頁  >  文章  >  後端開發  >  Go 中如何在沒有實例的情況下取得類型?

Go 中如何在沒有實例的情況下取得類型?

Linda Hamilton
Linda Hamilton原創
2024-10-31 06:19:02752瀏覽

How to Get a Type Without an Instance in Go?

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

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn