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

Comment gérer correctement lorsque Golang renvoie une erreur

王林
王林original
2019-12-24 15:40:333788parcourir

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

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

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

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

Refactorisez le code en fonction de notre correct posture :

func (self *CniParam) setTenantId() {
    self.TenantId = self.PodNs
}

Ensuite, le code appelant devient :

self.setTenantId()

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
}

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

value, ok := cache.Lookup(key) 
if !ok {    
// ...cache[key] does not exist… 
}

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!

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