ホームページ >バックエンド開発 >Golang >Go で「関数を引数の入力として使用できません」というエラーがスローされるのはなぜですか?それを修正するにはどうすればよいですか?

Go で「関数を引数の入力として使用できません」というエラーがスローされるのはなぜですか?それを修正するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-12 18:29:09263ブラウズ

Why Does Go Throw a

関数を引数の型として使用できない: トラブルシューティング

このエラーは、関数を引数として別の関数に渡そうとすると発生しますが、関数のシグネチャが予期された型と一致しません。特に Go プログラミングの場合、この問題は、特定の構造化パラメータを受け取り、別の関数の要件としてインターフェイスとエラーを返す関数を渡そうとしたときに発生します。

問題の理解

エラー メッセージ「関数 (type func()) を引数の型として使用できません」は、渡そうとしている関数が、関数で必要な型と一致しないことを意味します。 口論。この場合、引数には、特定の関数シグネチャを持つ MessageHandler インターフェイスの実装が必要です。

問題の解決

このエラーを解決するには、次のことを確認する必要があります。関数が MessageHandler インターフェイスの予期される署名に準拠していること:

type MessageHandler func(MessageDelivery) (interface{}, error)

これは、関数が必須:

  • MessageDeliver 型の引数を 1 つ取ります。
  • 2 つの値を持つタプルを返します:

    • 最初の値は次のようになります。インターフェイス タイプの。
    • 2 番目の値は、エラー。

例:

必要な署名に合わせて関数を変更します:

func UpperCaseHandler(md MessageDelivery) (interface{}, error) {
     s.Reply(MessageTest{strings.ToUpper(md.Message.(string))}, md.Delivery)
     return nil, nil
}

func RepeatHandler(md MessageDelivery) (interface{}, error) {
     s.Reply(MessageTest{strings.Repeat(md.Message.(string), 5)}, md.Delivery)
     return nil, nil
}

現在、これらの関数は MessageHandler インターフェイスと互換性があり、ConsumerFunc() に引数として渡すことができます。メソッド。

以上がGo で「関数を引数の入力として使用できません」というエラーがスローされるのはなぜですか?それを修正するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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