ホームページ > バックエンド開発 > Golang > Go の `reflect.TypeOf` からパラメータ名を取得できないのはなぜですか?

Go の `reflect.TypeOf` からパラメータ名を取得できないのはなぜですか?

Barbara Streisand
リリース: 2024-12-21 18:22:11
オリジナル
272 人が閲覧しました

Why Can't I Get Parameter Names from Go's `reflect.TypeOf`?

Go のパラメータ名を反映する

Go メソッドのパラメータ名を決定したいことがよくあります。ただし、TMethod 関数を通じてこの情報を取得しようとすると、ユーザーは構造体名 (この場合は testData) のみが返されることに気付きます。

パラメータ名の不在について

Go では、メソッドまたは関数のパラメーターの名前は実行時情報に明示的に保存されません。これは、メソッドまたは関数の呼び出し元にとってパラメーター名が重要であるとはみなされないためです。焦点はパラメーターの型とその順序です。

同じパラメーターと結果の型を持つ 2 つの関数は、パラメーター名に関係なく、同じ型を持ちます。例:

func f1(a int) {}
func f2(b int) {}

fmt.Println(reflect.TypeOf(f1) == reflect.TypeOf(f2)) // Prints true
ログイン後にコピー

パラメータの命名に関する代替アプローチ

必要な機能が、「名前付き」パラメータを使用して関数を呼び出すためのフレームワークを作成することである場合、代替のアプローチが存在します。 :

  • 構造体の使用: 名前付きフィールドリフレクションの Value.FieldByName() メソッドと Type.FieldByName() メソッドを使用して取得できます。
  • マップの使用: パラメータ値はそれぞれの名前にマップできます。

さらにインサイト

詳細な情報と例については、次のリソースを参照してください:

  • [名前のない引数は Go にありますか?](https://stackoverflow.com /questions/72503238/is-unnamed-arguments-a-thing-in-go)
  • [初期化中]関数フィールド](https://stackoverflow.com/questions/47924187/initialize-function-fields)
  • [golang-nuts メーリング リストに関する関連ディスカッション](https://groups.google.com/g /golang-nuts/c/wlyXOha-asQ)

以上がGo の `reflect.TypeOf` からパラメータ名を取得できないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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