ホームページ >バックエンド開発 >Golang >Goでインスタンスのない型を取得するにはどうすればよいですか?

Goでインスタンスのない型を取得するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-10-31 06:19:02839ブラウズ

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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。