Maison > développement back-end > Golang > Pourquoi Go génère-t-il une erreur « Impossible d'utiliser la fonction comme type dans l'argument » et comment puis-je la corriger ?

Pourquoi Go génère-t-il une erreur « Impossible d'utiliser la fonction comme type dans l'argument » et comment puis-je la corriger ?

Barbara Streisand
Libérer: 2024-12-12 18:29:09
original
259 Les gens l'ont consulté

Why Does Go Throw a

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

Cela signifie que votre fonction doit :

  • Prendre un seul argument de type MessageDelivery.
  • Renvoyer un tuple avec deux valeurs :

    • La première valeur doit être du type d'interface.
    • La deuxième valeur doit être un erreur.

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

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!

source:php.cn
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