Maison  >  Article  >  développement back-end  >  Compétences en gestion des erreurs dans les fonctions Golang

Compétences en gestion des erreurs dans les fonctions Golang

WBOY
WBOYoriginal
2024-05-04 22:06:01774parcourir

Conseils de gestion des erreurs dans les fonctions Golang : utilisez error.Error() pour convertir les erreurs en chaînes. Utilisez Printf pour formater les messages d'erreur. Utilisez wrap pour ajouter un résumé des erreurs. Définissez des types d’erreurs personnalisés pour détecter les erreurs en double. Utilisez la fonction wrap pour gérer les erreurs dans les réponses de l'API.

Compétences en gestion des erreurs dans les fonctions Golang

Compétences de gestion des erreurs dans les fonctions Golang

Le langage Go fournit un riche mécanisme de gestion des erreurs qui peut nous aider à écrire du code robuste et fiable. Cet article couvrira différentes techniques de gestion des erreurs dans les fonctions Golang, ainsi que des exemples.

error.Error()

Le moyen le plus simple est d'utiliser error.Error() pour convertir le message d'erreur en chaîne. error.Error() 将错误信息转换为字符串。

func f() error {
    return errors.New("some error")
}

func main() {
    err := f()
    if err != nil {
        fmt.Println(err.Error()) // 输出: some error
    }
}

Printf

对于更复杂的错误,我们可以使用 Printf 来格式化错误消息。

func f() error {
    return fmt.Errorf("cannot open file: %s", filename)
}

func main() {
    err := f()
    if err != nil {
        fmt.Println("Error:", err) // 输出: Error: cannot open file: filename
    }
}

wrap

wrap 函数可以在现有错误之上添加一层摘要。

func f() error {
    err := os.OpenFile("filename", os.O_RDWR, 0666) // 可能抛出错误
    return errors.Wrap(err, "failed to open file")
}

func main() {
    err := f()
    if err != nil {
        fmt.Println("Error:", err) // 输出: Error: failed to open file: filename
                                    // 同时包含底层错误信息
    }
}

自定义错误类型

对于重复发生的错误,我们可以定义自定义错误类型。

type FileOpenError struct {
    path string
    err  error
}

func (e *FileOpenError) Error() string {
    return fmt.Sprintf("cannot open file: %s: %v", e.path, e.err)
}

func f() error {
    err := os.OpenFile("filename", os.O_RDWR, 0666)
    if err != nil {
        return &FileOpenError{path: "filename", err: err}
    }
    return nil
}

func main() {
    err := f()
    if err != nil {
        if casted, ok := err.(*FileOpenError); ok {
            fmt.Println("Error:", casted.Error()) // 输出: cannot open file: filename: open filename: permission denied
        }
    }
}

实战案例

以下是一个使用 wrap

func apiCall() error {
    resp, err := http.Get("https://example.com/api")
    if err != nil {
        return errors.Wrap(err, "failed to make API call")
    }
    defer resp.Body.Close()
    ... // 处理响应
}

func main() {
    err := apiCall()
    if err != nil {
        fmt.Println("Error:", err) // 输出: Error: failed to make API call: Get https://example.com/api: dial tcp: lookup example.com on 8.8.8.8:53: no such host
    }
}

Printf

🎜🎜Pour des erreurs plus complexes, nous pouvons utiliser Printf pour formater le message d'erreur. 🎜rrreee🎜🎜wrap🎜🎜🎜 La fonction wrap ajoute une couche de résumé en plus des erreurs existantes. 🎜rrreee🎜🎜Types d'erreur personnalisés🎜🎜🎜Pour les erreurs récurrentes, nous pouvons définir des types d'erreur personnalisés. 🎜rrreee🎜🎜Cas pratique🎜🎜🎜Ce qui suit est un exemple de réponse API utilisant la fonction wrap pour gérer les erreurs : 🎜rrreee🎜En utilisant ces techniques de gestion des erreurs, nous pouvons nous assurer que les fonctions Golang sont présentées dans de manière claire et compréhensible. Signaler les erreurs dans le mode de fonctionnement. 🎜

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