ホームページ > バックエンド開発 > Golang > リフレクトを取得する方法。インスタンスなしで Go と入力しますか?

リフレクトを取得する方法。インスタンスなしで Go と入力しますか?

Linda Hamilton
リリース: 2024-10-30 08:49:02
オリジナル
302 人が閲覧しました

How to Get a reflect.Type in Go Without an Instance?

インスタンスを持たない型の取得

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

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート