Heim >Backend-Entwicklung >Golang >Wann und warum wird „err.(*os.PathError)' in Go verwendet?

Wann und warum wird „err.(*os.PathError)' in Go verwendet?

Barbara Streisand
Barbara StreisandOriginal
2024-11-04 10:03:02631Durchsuche

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

Err.(*os.PathError) in Go verstehen

In Gos Dokumentation zur effektiven Fehlerbehandlung (https://golang.org/doc/ Effective_go.html #errors) sind Sie möglicherweise auf das Code-Snippet gestoßen:

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

Dieser Code demonstriert die Verwendung von err.(*os.PathError). Schauen wir uns genauer an, was es bedeutet.

Was ist err.(*os.PathError)?

Wenn os.Create aufgerufen wird, gibt es einen Fehler als zweiten Rückgabewert zurück. Dieser Fehler implementiert die Fehlerschnittstelle { Error() string }. Jeder Datentyp, der über eine Error-Methode verfügt, kann diese Schnittstelle implementieren und ihr zugewiesen werden.

Normalerweise reicht die einfache Ausgabe der Fehlermeldung aus. Im gegebenen Beispiel zielt das Programm jedoch darauf ab, den ENOSPC-Fehler (kein Platz auf dem Gerät übrig) gezielt zu behandeln. Das Betriebssystempaket stellt in solchen Fällen einen *os.PathError als Fehlerimplementierung bereit. Wenn Sie auf weitere Informationen zum Fehler zugreifen müssen, können Sie ihn umwandeln.

Typ Assertion: e, ok := err.(*os.PathError)

Die Anweisung e, ok : = err.(os.PathError) verwendet Typzusicherung. Es überprüft, ob der Schnittstellenwert err einen os.PathError als konkreten Typ enthält, und wenn ja, gibt es diesen Wert zurück. Wenn ein anderer Typ in der Schnittstelle vorhanden ist (andere Typen können auch die Fehlerschnittstelle implementieren), wird einfach der Wert Null und falsch zurückgegeben (in diesem Fall Null, falsch).

Das obige ist der detaillierte Inhalt vonWann und warum wird „err.(*os.PathError)' in Go verwendet?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn