を望んでいる、FUNCへの引数としてのインターフェイスの実装を使用することはできません、私は次のエラーを取得していますこれらのサービスのいずれかからの着信メッセージ:はインタフェース
// IncomingMessage is a message that comes in on a messaging service
type IncomingMessage interface {
Send() error
}
// MessagingService is a service on which messages can be send (like Telegram or FB Messenger)
type MessagingService interface {
Start()
HandleIncomingMessage(IncomingMessage) error
GetHTTPHandler() http.HandlerFunc
GetCommands() []MessagingCommand
}
MessagingService
の最初の実装は、電報のためのものです。問題は、現在、本当に何もしないHandleIncomingMessage
関数である、ちょうど次のようになります。
// HandleIncomingMessage will take an incoming message and repond to it
func (s TelegramService) HandleIncomingMessage(msg *telegram.Message) error {
return nil
}
問題は、この関数はコンパイラがインターフェースに準拠していないと言うtelegram.Message
を、受け入れることです。事はtelegram.Message
がIncomingMessage
の実装であることを、次のとおりです。最初
// Message is a Telegram message
type Message struct {
// Added the line below at some point, but it didn't work without it either
mypackage.IncomingMessage
MessageID uint64 `json:"message_id"`
FirstName string `json:"first_name"`
Username string `json:"username"`
Date uint64 `json:"date"`
Text string `json:"text"`
Chat Chat `json:"chat"`
From User `json:"from"`
}
// Send will take m and send it
func (m Message) Send() error {
// Do stuff
return nil
}
IncomingMessage
は、私が最初に問題に気づいたところで、空のインターフェースでした。私はちょうどそれを任意の構造体wouldnt't与えるかもしれないと思ったので、私はとにかく追加する予定だったSend()
関数を追加しようとしました。しかし、私はまだこのエラーが発生しています。
telegram.Message
がインターフェイスを実装していない理由はありません。それはかなり簡単です。
誰もこれが機能しない理由を説明できますか?
PS:私のパッケージは実際にmypackage
と呼ばれていないが、それはインタフェースが定義されている方法ですので、IncomingMessage
引数を取る必要があり、明確にするため
メソッドのシグネチャは、 'HandleIncomingMessage(IncomingMessage)error'です。あなたは別の署名を使うことはできませんが、どうしてそんなに必要なのですか? – JimB
コンパイラの苦情が有効です。 TelegramServiceは* IncomingMessageを処理することはできません。一部のみで、MessagingServiceインターフェイスを満たさない場合があります。 – Peter
@JimBありがとうございました。 IncomingMessageを使用している場合は、それをtelegram.Messageのように使用できますか? –