サービス関数呼び出し: 引数の不一致
このコードでは、関数 UpperCaseHandler とRepeatHandler に互換性がないという問題に直面しています。期待される関数シグネチャasl.MessageHandler.
cannot use UpperCaseHandler (type func(asl.MessageDelivery)) as type asl.MessageHandler in assignment
cannot use RepeatHandler (type func(asl.MessageDelivery)) as type asl.MessageHandler in argument to Repeater.ConsumeFunc
関数のシグネチャについて
asl.MessageHandler 型は、次のシグネチャを持つ関数を予期します:
type MessageHandler func(MessageDelivery) (interface{}, error)
これは、これらの関数が単一の Messagedelivery 構造体を引数として受け取り、両方の結果値を返す必要があることを意味します(タイプを問わず) およびエラー (ある場合)。
関数のシグネチャの修正
この問題を解決するには、UpperCaseHandler 関数とRepeatHandler 関数を一致するように変更します。期待される署名:
func UpperCaseHandler(md asl.MessageDelivery) (interface{}, error) { s.Reply(MessageTest{strings.ToUpper(md.Message.(string))}, md.Delivery) // Modified to return nil, nil as the MessageDelivery struct is handled by the ASL library return nil, nil } func RepeatHandler(md asl.MessageDelivery) (interface{}, error) { s.Reply(MessageTest{strings.Repeat(md.Message.(string), 5)}, md.Delivery) // Modified to return nil, nil as the MessageDelivery struct is handled by the ASL library return nil, nil }
これらの変更により、関数は期待される署名と一致し、コードが実行されるようになります。成功しました。
以上が`UpperCaseHandler` および `RepeatHandler` 関数が `asl.MessageHandler` と互換性がないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。