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
Patricia Arquetteoriginal
2024-12-11 09:37:10710parcourir

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

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

type MessageHandler func(MessageDelivery) (interface{}, error)

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)
}

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
}

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:
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