Maison > développement back-end > Golang > Pourquoi Golang renvoie-t-il une erreur « Impossible d'utiliser la fonction (type func()) comme type d'argument » lors du passage de fonctions ?

Pourquoi Golang renvoie-t-il une erreur « Impossible d'utiliser la fonction (type func()) comme type d'argument » lors du passage de fonctions ?

Patricia Arquette
Libérer: 2024-12-11 09:37:10
original
763 Les gens l'ont consulté

Why Does Golang Throw a

"impossible d'utiliser la fonction (type func()) comme type en argument"

Dans Golang, lors du passage d'une fonction comme argument à une autre fonction, la signature de type de la fonction transmise doit correspondre à la signature attendue de la fonction réceptrice. Dans votre code, vous essayez de passer les fonctions suivantes comme arguments :

UpperCaseHandler
RepeatHandler
Copier après la connexion

Cependant, la signature de type attendue pour la fonction de gestionnaire de messages est :

type MessageHandler func(MessageDelivery) (interface{}, error)
Copier après la connexion

Comme vous pouvez le voir , la fonction de gestionnaire de messages attendue prend une structure MessageDelivery comme argument et renvoie une interface{} et une erreur. Vos fonctions, cependant, sont définies comme suit :

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)
}
Copier après la connexion

Notez qu'il manque les valeurs de retour (interface{} et erreur) à vos fonctions. Pour résoudre ce problème, vous devez modifier vos fonctions pour qu'elles correspondent à la signature attendue. Voici comment procéder :

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
}
Copier après la connexion

En ajoutant les valeurs de retour manquantes, vos fonctions correspondront désormais à la signature attendue, et vous pourrez les passer en arguments aux autres fonctions sans rencontrer le " ne peut pas utiliser la fonction (tapez func()) comme erreur de type dans l'argument".

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!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal