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