Funktion kann nicht als Typ im Argument verwendet werden: Fehlerbehebung
Dieser Fehler tritt auf, wenn versucht wird, eine Funktion als Argument an eine andere Funktion zu übergeben, aber Die Funktionssignatur stimmt nicht mit dem erwarteten Typ überein. Insbesondere bei der Go-Programmierung tritt dieses Problem auf, wenn Sie versuchen, eine Funktion zu übergeben, die einen bestimmten strukturierten Parameter annimmt und eine Schnittstelle und einen Fehler als Voraussetzung für eine andere Funktion zurückgibt.
Das Problem verstehen
Die Fehlermeldung „Funktion (Typ func()) kann nicht als Typ im Argument verwendet werden“ bedeutet, dass die Funktion, die Sie übergeben möchten, nicht mit dem für das Argument erforderlichen Typ übereinstimmt. In diesem Fall erwartet das Argument eine Implementierung der MessageHandler-Schnittstelle, die über eine bestimmte Funktionssignatur verfügt.
Beheben des Problems
Um diesen Fehler zu beheben, müssen Sie sicherstellen dass Ihre Funktion der erwarteten Signatur der MessageHandler-Schnittstelle entspricht:
type MessageHandler func(MessageDelivery) (interface{}, error)
Das bedeutet, dass Ihre Funktion muss:
Ein Tupel mit zwei Werten zurückgeben:
Beispiel:
Ändern Sie Ihre Funktionen, um sie an die erforderliche Signatur anzupassen:
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 }
Jetzt sind diese Funktionen mit der MessageHandler-Schnittstelle kompatibel und können als Argumente an die ConsumerFunc()-Methode übergeben werden.
Das obige ist der detaillierte Inhalt vonWarum gibt Go den Fehler „Funktion kann nicht als Typ im Argument verwendet werden' aus und wie kann ich ihn beheben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!