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
Barbara Streisandoriginal
2024-12-12 18:29:09315parcourir

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)

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
}

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!

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