Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bila dan Mengapa Gunakan `err.(*os.PathError)` dalam Go?

Bila dan Mengapa Gunakan `err.(*os.PathError)` dalam Go?

Barbara Streisand
Barbara Streisandasal
2024-11-04 10:03:02565semak imbas

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

Memahami ralat.(*os.PathError) dalam Go

Dokumentasi In Go tentang pengendalian ralat yang berkesan (https://golang.org/doc/effective_go.html #errors), anda mungkin pernah menemui coretan kod:

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

Kod ini menunjukkan penggunaan err.(*os.PathError). Mari kita mendalami maksudnya.

Apa itu err.(*os.PathError)?

Apabila os.Create dipanggil, ia mengembalikan ralat sebagai nilai pulangan kedua. Ralat ini melaksanakan antara muka ralat { Error() string }. Mana-mana jenis data yang mempunyai kaedah Ralat boleh melaksanakan antara muka ini dan ditugaskan kepadanya.

Biasanya, hanya mengeluarkan mesej ralat sudah memadai. Walau bagaimanapun, dalam contoh yang diberikan, program ini bertujuan untuk mengendalikan ralat ENOSPC (tiada ruang tersisa pada peranti) secara khusus. Pakej os menyediakan *os.PathError sebagai pelaksanaan ralat dalam kes sedemikian. Jika anda perlu mengakses maklumat lanjut tentang ralat, anda boleh menghantarnya.

Jenis Penegasan: e, ok := err.(*os.PathError)

Pernyataan e, ok : = err.(os.PathError) menggunakan penegasan jenis. Ia mengesahkan jika nilai antara muka ralat memegang os.PathError sebagai jenis konkritnya dan jika ya, ia mengembalikan nilai tersebut. Jika jenis berbeza terdapat dalam antara muka (jenis lain juga mungkin melaksanakan antara muka ralat), ia hanya mengembalikan nilai sifar dan palsu (tiada, palsu dalam kes ini).

Atas ialah kandungan terperinci Bila dan Mengapa Gunakan `err.(*os.PathError)` dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn