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 サイトの他の関連記事を参照してください。