目次
質問内容
解決策
ホームページ バックエンド開発 Golang プリミティブ型に基づく型のreflect.Kinを取得します。

プリミティブ型に基づく型のreflect.Kinを取得します。

Feb 09, 2024 pm 03:12 PM
overflow

プリミティブ型に基づく型のreflect.Kinを取得します。

プリミティブ型に基づいて、reflect.Kind を取得することは、PHP プログラミングにおける重要なスキルです。 reflect.Kind は、PHP が提供するリフレクション クラス ライブラリのプロパティであり、変数のデータ型を決定するために使用できます。 Reflect.Kindを利用することで、変数の型を簡単に取得し、それに応じた演算や処理を行うことができます。 PHP 開発者にとって、このスキルを習得すると、リフレクション メカニズムをよりよく理解して使用できるようになり、コードの読みやすさと柔軟性が向上します。この記事では、PHP エディターの Baicao が、プリミティブ型に基づいて Reflect.Kind を取得する方法を詳細に紹介し、読者がこの知識ポイントをよりよく習得できるように、いくつかの実用的な例とテクニックを共有します。

質問内容

インターフェースを実装する型のreflect.interfaceとしてreflect.kindを使用したいのですが、その実装はプリミティブ型に基づいています: type id string

この質問に対するもう 1 つの答えは、kind() を呼び出すときに、reflect.interfaces を返す型の Reflect.type を取得する方法かもしれません。

これは、外出先のプレイグラウンドでの完全な例です:

type ID interface {
    myid()
}

type id string

func (id) myid() {}

func main() {
    id := ID(id("test"))
    
    fmt.Println(id)
    fmt.Println(reflect.TypeOf(id))
    
    // How to get the kind to return "reflect.Interface" from the var "id"?
    fmt.Println(reflect.TypeOf(id).Kind())
}
ログイン後にコピー

解決策

reflect.typeof() (および reflect.valueof() ) インターフェース {} が必要です。基本的に、reflect.typeof() に渡す値がどのようなものであっても、それがまだインターフェース値でない場合は、暗黙的に interface{} にラップされます。渡された値がすでにインターフェース値である場合、その中に格納されている具体的な値は interface{} として渡されます。

この「再パッケージ化」を回避するために、これはインターフェイスへのポインターが意味をなすまれなケースの 1 つであり、実際、ここでそれを回避することはできません。インターフェイス値へのポインタを渡す必要があります。

したがって、インターフェイスへのポインタを渡すと、ポインタは interface{} 値でラップされます。 type.elem() を使用して、「ポインター型」の型記述子、つまりポインター型の要素型を取得できます。これは、探しているインターフェイス型の型記述子になります。のために。 p> ###例:### リーリー

出力内容 (

go playground

で試してください): リーリー 関連する質問を表示:

Go の Reflect.valueof() と value.elem() の違いは何ですか?

以上がプリミティブ型に基づく型のreflect.Kinを取得します。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

2009 年から 2025 年の誕生以来のビットコインの価格 BTC 過去の価格の最も完全な概要 2009 年から 2025 年の誕生以来のビットコインの価格 BTC 過去の価格の最も完全な概要 Jan 15, 2025 pm 08:11 PM

2009 年から 2025 年の誕生以来のビットコインの価格 BTC 過去の価格の最も完全な概要

Windows 11 の右下隅で時間がなくなった場合の対処方法_Windows 11 の右下隅で時間がなくなった場合の対処方法 Windows 11 の右下隅で時間がなくなった場合の対処方法_Windows 11 の右下隅で時間がなくなった場合の対処方法 May 06, 2024 pm 01:20 PM

Windows 11 の右下隅で時間がなくなった場合の対処方法_Windows 11 の右下隅で時間がなくなった場合の対処方法

Java 関数について質問したり議論したりできるコミュニティ フォーラムやディスカッション グループはありますか? Java 関数について質問したり議論したりできるコミュニティ フォーラムやディスカッション グループはありますか? Apr 28, 2024 pm 02:12 PM

Java 関数について質問したり議論したりできるコミュニティ フォーラムやディスカッション グループはありますか?

Pythonで他の人のコードを使用する方法 Pythonで他の人のコードを使用する方法 May 05, 2024 pm 07:54 PM

Pythonで他の人のコードを使用する方法

win11 コンピューターの時刻が常に間違っている場合はどうすればよいですか? Windows 11コンピュータで間違った時刻を調整する方法 win11 コンピューターの時刻が常に間違っている場合はどうすればよいですか? Windows 11コンピュータで間違った時刻を調整する方法 May 03, 2024 pm 09:20 PM

win11 コンピューターの時刻が常に間違っている場合はどうすればよいですか? Windows 11コンピュータで間違った時刻を調整する方法

Java関数開発における一般的な例外の種類とその修復方法 Java関数開発における一般的な例外の種類とその修復方法 May 03, 2024 pm 02:09 PM

Java関数開発における一般的な例外の種類とその修復方法

CSSでのオーバーフローとはどういう意味ですか CSSでのオーバーフローとはどういう意味ですか Apr 28, 2024 pm 03:15 PM

CSSでのオーバーフローとはどういう意味ですか

Douyin のランダムなアカウントを管理する人はいませんか?二度目の異議申し立てはできますか? Douyin のランダムなアカウントを管理する人はいませんか?二度目の異議申し立てはできますか? May 03, 2024 am 09:37 AM

Douyin のランダムなアカウントを管理する人はいませんか?二度目の異議申し立てはできますか?

See all articles