Maison > développement back-end > Golang > Comment gérer correctement lorsque Golang renvoie une erreur

Comment gérer correctement lorsque Golang renvoie une erreur

王林
Libérer: 2019-12-24 15:40:33
original
3758 Les gens l'ont consulté

Comment gérer correctement lorsque Golang renvoie une erreur

Méthode de manipulation correcte :

1 Lorsqu'il n'y a qu'une seule raison d'échec, n'utilisez pas d'erreur

Pour. exemple :

func (self *AgentContext) CheckHostType(host_type string) error {
    switch host_type {
    case "virtual_machine":        
                return nil
    case "bare_metal":    
            return nil
    }
    return errors.New("CheckHostType ERROR:" + host_type)
}
Copier après la connexion

Nous pouvons voir qu'il n'y a qu'une seule raison pour l'échec de cette fonction, donc le type de la valeur de retour doit être booléen, pas une erreur. Refactorisez le code :

func (self *AgentContext) IsValidHostType(hostType string) bool {
    return hostType == "virtual_machine" || hostType == "bare_metal"}
Copier après la connexion

. Explication : Dans la plupart des cas, le résultat Il y a plus d'une raison d'échec, en particulier pour les opérations d'E/S, les utilisateurs ont besoin de connaître plus d'informations sur l'erreur. À ce stade, le type de valeur de retour n'est plus un simple booléen, mais une erreur.

2. N'utilisez pas d'erreur lorsqu'il n'y a pas d'échec

L'erreur est si populaire dans Golang que beaucoup de gens ne se soucient de rien lors de la conception de fonctions. erreur même s'il n'y a aucune raison d'échec.

Jetons un coup d'œil à l'exemple de code :

func (self *CniParam) setTenantId() error {
    self.TenantId = self.PodNs    
    return nil}
Copier après la connexion

Pour la conception de fonction ci-dessus, il y aura le code d'appel suivant :

err := self.setTenantId()
if err != nil {
    // log
    // free resource
    return errors.New(...)
}
Copier après la connexion

Refactorisez le code en fonction de notre correct posture :

func (self *CniParam) setTenantId() {
    self.TenantId = self.PodNs
}
Copier après la connexion

Ensuite, le code appelant devient :

self.setTenantId()
Copier après la connexion

3 L'erreur doit être placée à la fin de la liste des types de valeurs de retour

Pour. le type de valeur de retour error , utilisé pour transmettre les informations d'erreur, généralement placé en dernier dans Golang.

resp, err := http.Get(url)
if err != nil {    
    return nill, err
}
Copier après la connexion

bool est le même que le type de valeur de retour.

value, ok := cache.Lookup(key) 
if !ok {    
// ...cache[key] does not exist… 
}
Copier après la connexion

4. Lorsque les erreurs sont transmises couche par couche, des journaux sont ajoutés à chaque couche

Des journaux sont ajoutés à chaque couche pour faciliter la localisation des défauts.

Articles et tutoriels connexes recommandés : tutoriel golang

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!

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