Maison > développement back-end > Golang > le corps du texte

Parlons des mécanismes courants de journalisation des erreurs dans Golang

PHPz
Libérer: 2023-04-23 13:53:30
original
599 Les gens l'ont consulté

Golang est un langage en constante évolution, introduisant constamment de nouvelles fonctionnalités et ajoutant davantage de bibliothèques, ce qui en fait le meilleur choix pour le développement moderne. Cependant, même le meilleur code peut contenir des erreurs.

Pour les développeurs Golang, le journal des erreurs est un outil très important. Ils vous permettent d'identifier rapidement les erreurs et de les corriger, rendant votre application plus robuste et fiable. Cependant, pour utiliser correctement les journaux d’erreurs, vous devez savoir comment les créer, les enregistrer et les déboguer.

Cet article présentera les mécanismes courants de journalisation des erreurs dans Golang, y compris la gestion des erreurs de base, le mécanisme de panique/différence, le journal de bibliothèque standard et la bibliothèque de journaux tierce, ainsi que certaines bonnes pratiques et compétences de débogage.

  1. Gestion de base des erreurs
    Le mécanisme de base de gestion des erreurs dans Golang consiste à utiliser le type d'erreur. Il s'agit d'une interface prédéfinie utilisée pour représenter les informations d'erreur renvoyées par certaines fonctions ou méthodes. Si la valeur de retour d'une fonction ou d'une méthode contient une valeur de type error, cela signifie que l'opération a peut-être échoué. Vous pouvez utiliser des instructions if ou des instructions switch pour vérifier la valeur de l'erreur et prendre les mesures appropriées. Par exemple :

func openFile(filename string) error {

file, err := os.Open(filename)
if err != nil {
    return err
}
defer file.Close()

return nil
Copier après la connexion

}

Dans le code ci-dessus, la fonction openFile ouvre un fichier et renvoie une valeur de type error. Si le fichier ne peut pas être ouvert, il renverra une valeur d'erreur non nulle. Dans le programme principal, vous pouvez vérifier la valeur d'erreur renvoyée et agir en conséquence :

err := openFile("input.txt")
if err != nil {

log.Fatal(err)
Copier après la connexion
Copier après la connexion

}

Dans ce cas, la fonction main appelle le fonction openFile et vérifie l’erreur renvoyée. Si une erreur se produit, il imprime un message d'erreur et quitte le programme.

  1. Mécanisme de panique/defer
    Il existe un mécanisme spécial dans Golang qui peut être utilisé lorsqu'une erreur fatale se produit dans le programme : le mécanisme de panique/defer. Lorsqu'un programme rencontre une erreur qui ne peut pas être gérée, il peut appeler la fonction de panique pour déclencher une exception de panique, ce qui interrompra l'exécution de la fonction en cours et remontera dans la pile d'appels jusqu'à ce qu'elle soit correctement interceptée ou que le programme se termine. Normalement, vous ne devez pas appeler directement la fonction panique. Au lieu de cela, vous devez utiliser le mécanisme de report pour intercepter les exceptions et effectuer certaines opérations de nettoyage, telles que la fermeture de fichiers, la libération de mémoire, etc. Par exemple :

func openFile(filename string) {

file, err := os.Open(filename)
if err != nil {
    panic(err)
}
defer file.Close()

// ... code that uses the file ...
Copier après la connexion

}

Dans l'extrait de code ci-dessus, la fonction openFile tente d'ouvrir un fichier. Si l'ouverture échoue, une exception de panique sera déclenchée. Il utilise ensuite une instruction defer pour garantir la fermeture du fichier. Dans la fonction main correspondante, vous pouvez écrire une instruction recovery pour intercepter l'exception et effectuer des opérations de nettoyage :

func main() {

defer func() {
    if r := recover(); r != nil {
        log.Println("Recovered from panic:", r)
    }
}()

openFile("input.txt")
Copier après la connexion

}

Dans ce cas, la fonction main utilise une instruction defer pour garantir que dans n'importe quel cas cas L'erreur sera détectée ci-dessous. Si la fonction openFile déclenche une exception, l'instruction de récupération sera exécutée et un message d'erreur sera imprimé.

  1. Journal de la bibliothèque standard
    La bibliothèque standard de Golang contient un système de journalisation très basique : le package log. Il dispose de trois fonctions de sortie : Print, Printf et Println. Ils fonctionnent de la même manière, ils formatent simplement la chaîne différemment. Par exemple :

log.Print("Hello, world!")
log.Printf("Bonjour, %s!", "world")
log.Println("Hello", "world")

Ces fonctions Afficher le texte sur la sortie standard. Si vous devez écrire le fichier journal dans un fichier au lieu de la console, utilisez log.SetOutput :

f, err := os.Create("logfile")
if err != nil {

log.Fatal(err)
Copier après la connexion
Copier après la connexion

}
defer f . Close()
log.SetOutput(f)

Cela créera un fichier appelé fichier journal et écrira toutes les sorties du journal dans ce fichier.

Le package de journaux Golang fournit également d'autres fonctionnalités, telles que la création d'enregistreurs personnalisés et la définition de niveaux de journalisation, etc. Consultez la documentation officielle pour plus de détails.

  1. Bibliothèques de journalisation tierces
    Il existe de nombreuses excellentes bibliothèques de journalisation tierces dans la communauté Golang, telles que logrus, zap, zerolog, etc. Ces bibliothèques offrent plus de fonctionnalités et d'options telles que la journalisation structurée, plusieurs sorties, des niveaux de journalisation et des contrôles de champ personnalisables, et bien plus encore. Voici un exemple de code utilisant la bibliothèque logrus :

import log "github.com/sirupsen/logrus"

func main() {

log.SetFormatter(&log.JSONFormatter{})
log.SetLevel(log.WarnLevel)

log.WithFields(log.Fields{
    "animal": "walrus",
    "size":   10,
}).Info("A group of walrus emerges from the ocean")
Copier après la connexion

}

Dans cet exemple, nous utilisons la bibliothèque logrus et le changement de format JSON . Ensuite, nous avons défini le niveau d'erreur sur avertissement, puis nous avons utilisé l'entrée de journal de logrus, nous avons fourni certains champs et nous avons enregistré le message indiquant qu'un groupe de morses avait émergé de l'océan.

  1. Conseils de débogage
    Lors de l'écriture de code, rechercher et corriger les erreurs prend toujours du temps. Voici quelques conseils de débogage utiles qui peuvent vous aider à résoudre les problèmes plus rapidement.
  2. Utilisez fmt.Printf pour imprimer les valeurs intermédiaires.

Lorsque vous constatez que le résultat de votre code n'est pas celui que vous attendez, vous pouvez utiliser fmt.Printf pour essayer d'identifier le problème. Par exemple :

func foo() {

for i := 0; i < 10; i++ {
    fmt.Printf("%d\n", i)
}
Copier après la connexion

}

Dans ce cas, la fonction foo affichera le nombre sélectionné à chaque itération de la boucle, nous aidant ainsi à identifier le problème.

  1. 使用log.Println或log.Printf记录哪一步失败了。

在某些情况下,您的代码可能会因多个原因之一而失败。使用log.Println或log.Printf来记录当前执行的代码行可以帮助您定位错误。例如:

func openFile(filename string) error {

log.Printf("Trying to open file %s", filename)
file, err := os.Open(filename)
if err != nil {
    log.Printf("Failed to open file %s: %s", filename, err)
    return err
}
defer file.Close()

return nil
Copier après la connexion

}

在这种情况下,函数openFile在尝试打开文件之前记录了它正在尝试打开的文件名。如果出现错误,它还将记录哪个文件无法正常打开。

  1. 使用GDB进行调试。

如果您需要深入调试代码,GDB可能是您需要的工具。它是一个强大的调试器,可以与Golang程序一起使用。例如:

$ go build -gcflags "-N -l" -o myprogram
$ gdb ./myprogram

使用上面的命令编译您的Golang程序和调试器。您还需要添加-gcflags“-N -l”标志以确保GDB可以正确识别调试信息。然后,您可以在GDB命令行中运行程序并在其中设置断点和查看变量等。

总结
对于Golang开发者来说,错误日志是一个非常重要的工具,可以帮助识别和解决问题。本文介绍了Golang中常见的错误日志机制,包括基本的错误处理、panic/defer机制、标准库log和第三方日志库,以及一些最佳实践和调试技巧。无论您是新手还是高级开发人员,正确地使用错误日志机制都是必不可少的。

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: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
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!