ホームページ > バックエンド開発 > Golang > Golang が関数を渡すときに「関数 (type func()) を引数の型として使用できません」というエラーをスローするのはなぜですか?

Golang が関数を渡すときに「関数 (type func()) を引数の型として使用できません」というエラーをスローするのはなぜですか?

Patricia Arquette
リリース: 2024-12-11 09:37:10
オリジナル
666 人が閲覧しました

Why Does Golang Throw a

「関数 (type func()) を引数の型として使用できません」

Golang では、関数を引数として別の関数に渡すときに、型シグネチャ渡された関数の署名は、受信関数の予期される署名と一致する必要があります。コードでは、次の関数を引数として渡そうとしています:

UpperCaseHandler
RepeatHandler
ログイン後にコピー

ただし、メッセージ ハンドラー関数の予期される型シグネチャは次のとおりです:

type MessageHandler func(MessageDelivery) (interface{}, error)
ログイン後にコピー

ご覧のとおりの場合、予期されるメッセージ ハンドラ関数は Messagedelivery 構造体を引数として受け取り、インターフェースとエラーを返します。{}ただし、関数は次のように定義されています:

func UpperCaseHandler(md asl.MessageDelivery) {
     s.Reply(MessageTest{strings.ToUpper(md.Message.(string))}, md.Delivery)
}

func RepeatHandler(md asl.MessageDelivery) {
     s.Reply(MessageTest{strings.Repeat(md.Message.(string), 5)}, md.Delivery)
}
ログイン後にコピー

関数には戻り値 (interface{} と error) が欠落していることに注意してください。これを修正するには、期待される署名と一致するように関数を変更する必要があります。その方法は次のとおりです:

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

func RepeatHandler(md asl.MessageDelivery) (interface{}, error} {
     s.Reply(MessageTest{strings.Repeat(md.Message.(string), 5)}, md.Delivery)
     return nil, nil
}
ログイン後にコピー

欠落している戻り値を追加すると、関数は期待されるシグネチャと一致し、「」に遭遇することなく他の関数に引数として渡すことができるようになります。関数 (型 func()) を引数の型として使用できません」エラー。

以上がGolang が関数を渡すときに「関数 (type func()) を引数の型として使用できません」というエラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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