Maison  >  Article  >  développement back-end  >  Quand et pourquoi utiliser `err.(*os.PathError)` dans Go ?

Quand et pourquoi utiliser `err.(*os.PathError)` dans Go ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-04 10:03:02566parcourir

When and Why Use `err.(*os.PathError)` in Go?

Comprendre err.(*os.PathError) dans Go

Documentation In Go sur la gestion efficace des erreurs (https://golang.org/doc/effective_go.html #errors), vous avez peut-être rencontré l'extrait de code :

<code class="go">for try := 0; try < 2; try++ {
    file, err = os.Create(filename)
    if err == nil {
        return
    }
    if e, ok := err.(*os.PathError); ok && e.Err == syscall.ENOSPC {
        deleteTempFiles()  // Recover some space.
        continue
    }
    return
}</code>

Ce code démontre l'utilisation de err.(*os.PathError). Voyons ce que cela signifie.

Qu'est-ce que err.(*os.PathError) ?

Lorsque os.Create est appelé, il renvoie une erreur comme deuxième valeur de retour. Cette erreur implémente l'interface d'erreur { chaîne Error() }. Tout type de données possédant une méthode Error peut implémenter cette interface et lui être attribué.

En général, la simple sortie du message d'erreur suffit. Cependant, dans l'exemple donné, le programme vise à gérer spécifiquement l'erreur ENOSPC (pas d'espace laissé sur l'appareil). Le package os fournit un *os.PathError comme implémentation de l'erreur dans de tels cas. Si vous avez besoin d'accéder à des informations supplémentaires sur l'erreur, vous pouvez la lancer.

Tapez l'assertion : e, ok := err.(*os.PathError)

L'instruction e, ok : = err.(os.PathError) utilise l'assertion de type. Il vérifie si la valeur de l'interface err contient un os.PathError comme type concret, et si c'est le cas, il renvoie cette valeur. Si un type différent est présent dans l'interface (d'autres types peuvent également implémenter l'interface d'erreur), il renvoie simplement la valeur zéro et false (nil, false dans ce cas).

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