In Golang wird beim Übergeben einer Funktion als Argument an eine andere Funktion die Typsignatur verwendet der übergebenen Funktion muss mit der erwarteten Signatur der empfangenden Funktion übereinstimmen. In Ihrem Code versuchen Sie, die folgenden Funktionen als Argumente zu übergeben:
UpperCaseHandler RepeatHandler
Die erwartete Typsignatur für die Nachrichtenhandlerfunktion lautet jedoch:
type MessageHandler func(MessageDelivery) (interface{}, error)
Wie Sie sehen können verwendet die erwartete Nachrichtenhandlerfunktion eine MessageDelivery-Struktur als Argument und gibt ein Interface{} und einen Fehler zurück. Ihre Funktionen sind jedoch wie folgt definiert:
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) }
Beachten Sie, dass Ihren Funktionen die Rückgabewerte (interface{} und error) fehlen. Um dies zu beheben, müssen Sie Ihre Funktionen so ändern, dass sie der erwarteten Signatur entsprechen. So können Sie es machen:
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 }
Durch Hinzufügen der fehlenden Rückgabewerte stimmen Ihre Funktionen nun mit der erwarteten Signatur überein und Sie können sie als Argumente an die anderen Funktionen übergeben, ohne auf das „ Fehler: Funktion (Typ func()) kann nicht als Typ-in-Argument verwendet werden.
Das obige ist der detaillierte Inhalt vonWarum wirft Golang beim Übergeben von Funktionen den Fehler „Funktion (Typ func()) kann nicht als Typ-in-Argument verwendet werden' aus?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!