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
WBOYavant
2024-02-09 10:03:19646parcourir

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

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
}

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

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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer