Maison > développement back-end > Golang > Comment définir plusieurs types comme un seul type dans Golang

Comment définir plusieurs types comme un seul type dans Golang

WBOY
Libérer: 2024-02-09 10:03:19
avant
648 Les gens l'ont consulté

Comment définir plusieurs types comme un seul type dans Golang

Dans Golang, nous devons parfois définir plusieurs types comme un seul type afin de traiter les données de manière plus flexible. Pour ce problème, l'éditeur PHP Xinyi apporte une solution à chacun. En utilisant des types d’interface, nous pouvons définir plusieurs types différents comme un seul type. Un type d'interface peut définir un ensemble de méthodes sans spécifier d'implémentation spécifique. De cette façon, nous pouvons implémenter cette interface pour plusieurs types, puis utiliser ce type d'interface pour des opérations et un traitement unifiés. Cette approche simplifie non seulement la structure du code, mais améliore également la lisibilité et la maintenabilité du code. Examinons ensuite les étapes spécifiques de mise en œuvre !

Contenu des questions

func GetFailedReasonAndErr (xxx) (string, error){
...
}

func AnyFailed (args ...(string, error)) {
   for _, arg := range args {
      if arg.error != nil {
         return arg
       }
   }
}

func main () {
    reason, err := AnyFailed(GetFailedReasonAndErr(yyy), GetFailedReasonAndErr(zzz))
    println(reason, err)
}
Copier après la connexion

Le code ci-dessus ne parvient pas à se compiler car "args ...(string, error)" n'est pas autorisé. Puis-je définir (String, Error) comme type ? Ou une meilleure façon ? (Puis-je utiliser des structures ?) comme : Tapez Reasonanderror(String, Error)

Solution de contournement

Puis-je définir (String, Error) comme type ?

Non, cette syntaxe n'est pas utilisée. go n'a pas de tuples.

(Pouvez-vous utiliser la structure ?) Par exemple : tapez Reasonanderror (string, error)

Oui, déclarez un type de structure et utilisez-le. La syntaxe pour déclarer un type de structure est la suivante :

type reasonanderror struct {
    reason string
    err    error
}
Copier après la connexion

Ensuite, pour l'utiliser, vous procédez comme suit :

func GetFailedReasonAndErr(xxx) reasonAndError {
    // ...
}

func AnyFailed(args ...reasonAndError) (string, error) {
   for _, arg := range args {
      if arg.err != nil {
         return arg.reason, arg.err
       }
   }
   return "", nil
}

func main () {
    reason, err := AnyFailed(GetFailedReasonAndErr(yyy), GetFailedReasonAndErr(zzz))
    println(reason, err)
}
Copier après la connexion

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:stackoverflow.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal