Impossible d'utiliser la fonction comme type dans un argument : dépannage
Cette erreur se produit lors de la tentative de transmission d'une fonction comme argument à une autre fonction, mais la signature de la fonction ne correspond pas au type attendu. Particulièrement dans le cas de la programmation Go, ce problème survient lorsque vous essayez de transmettre une fonction qui prend un paramètre structuré spécifique et renvoie une interface et une erreur comme condition requise pour une autre fonction.
Comprendre le problème
Le message d'erreur "ne peut pas utiliser la fonction (type func()) comme type en argument" signifie que la fonction que vous essayez de transmettre ne correspond pas au type requis par l'argument. Dans ce cas, l'argument attend une implémentation de l'interface MessageHandler, qui possède une signature de fonction spécifique.
Résoudre le problème
Pour résoudre cette erreur, vous devez vous assurer que votre fonction adhère à la signature attendue de l'interface MessageHandler :
type MessageHandler func(MessageDelivery) (interface{}, error)
Cela signifie que votre fonction doit :
Renvoyer un tuple avec deux valeurs :
Exemple :
Modifiez vos fonctions pour les aligner sur la signature requise :
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 }
Désormais, ces fonctions sont compatibles avec l'interface MessageHandler et peuvent être passées en arguments à la méthode ConsumerFunc().
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!