ホームページ > バックエンド開発 > Golang > Go 関数の署名を文字列として取得するにはどうすればよいですか?

Go 関数の署名を文字列として取得するにはどうすればよいですか?

Patricia Arquette
リリース: 2024-11-23 00:12:34
オリジナル
1031 人が閲覧しました

How Can I Retrieve a Go Function's Signature as a String?

Go で関数の署名を文字列として取得する

Go では、特定の名前と署名を持つ関数の署名を、 main パッケージは、次のような場合に有益なエラー メッセージを提供するために重要です。不一致。

Reflect.Type.String() は署名を取得できますか?

Reflect.Type.String() は型の名前 (main.ModuleInitFunc など) を提供します。 、完全な署名を提供するには不十分です。これは、名前付き型を持つ関数値を扱う場合に特に顕著です。

署名の構築

署名を構築するには、reflect.Type から手動で情報を収集する必要があります。 .

  • Type.In() は、i 番目 の型を提供します。
  • Type.Out() は、i番目 の結果の型を提供します。

実装例

以下は関数の署名を生成する関数の例ですvalue:

func signature(f interface{}) string {
    t := reflect.TypeOf(f)
    if t.Kind() != reflect.Func {
        return "<not a function>"
    }

    ...

    return buf.String()
}
ログイン後にコピー

この関数は、入力型と出力型を反復処理し、人間が判読できる文字列に組み立てることによって署名を構築します。

署名関数のテスト

署名関数をテストすると、次の結果が得られます。 results:

fmt.Println(signature(func(i int) error { return nil })) // func (int) error
fmt.Println(signature(myFunc)) // func (int) error
fmt.Println(signature(time.Now)) // func () time.Time
fmt.Println(signature(os.Open)) // func (string) (*os.File, error)
fmt.Println(signature(log.New)) // func (io.Writer, string, int) *log.Logger
fmt.Println(signature("")) // <not a function>
ログイン後にコピー

Go はパラメーター名と結果の型名へのアクセスを提供しないため、それらは署名から省略されることに注意することが重要です。

以上がGo 関数の署名を文字列として取得するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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