Bagaimana untuk memeriksa apakah file ada di Pergi?
Pergi's perpustakaan standar tidak memiliki fungsi semata-mata dimaksudkan untuk memeriksa apakah sebuah file ada atau tidak (seperti Python's os.jalan.ada
). Apa idiomatic cara untuk melakukannya?
390
8
Untuk memeriksa apakah file doesn't ada, setara dengan Python's
jika bukan os.jalan.ada(filename)
:Untuk memeriksa apakah sebuah file ada atau setara dengan Python's
jika os.jalan.ada(filename)
:Edited: per komentar terbaru
Jawaban oleh Caleb Cadang posted in gonuts mailing list.
Diambil dari: https://groups.google.com/forum/#!msg/golang-kacang-kacangan/Ayx-BMNdMFo/4rL8FFHr8v4J
Anda harus menggunakan
os.Stat()
danos.IsNotExist()
fungsi seperti dalam contoh berikut:Contoh ini diambil dari sini.
Contoh oleh user11617 adalah salah; itu akan melaporkan bahwa file yang ada bahkan dalam kasus di mana tidak, tapi ada kesalahan dari beberapa jenis lain.
Tanda tangan harus Ada(string) (bool, error). Dan kemudian, saat hal itu terjadi, hubungi situs yang tidak baik.
Kode dia menulis akan lebih baik sebagai:
Tapi saya sarankan ini sebagai gantinya:
Fungsi contoh:
Let's melihat beberapa aspek pertama, kedua fungsi yang disediakan oleh
os
paketgolang
tidak utilitas tapi kesalahan catur, apa yang saya maksud dengan itu adalah bahwa mereka hanya bungkus untuk menangani kesalahan pada lintas platform.Jadi pada dasarnya, jika
os.Stat
jika fungsi ini doesn't memberikan kesalahan yang berarti file yang sudah ada jika tidak anda perlu memeriksa apa jenis kesalahan itu, di sini datang menggunakan dua fungsios.IsNotExist
danos.IsExist
.Hal ini dapat dipahami sebagai
Stat
file melemparkan kesalahan karena itu doesn't ada atau melemparkan kesalahan karena itu eksis dan ada beberapa masalah dengan itu.Parameter bahwa fungsi-fungsi ini anda ambil adalah dari jenis
kesalahan
, meskipun anda mungkin dapat lulusnihil
untuk itu tapi itu tidak't make sense.Ini juga menunjukkan fakta bahwa
IsExist adalah tidak sama !IsNotExist
, mereka adalah jalan dua hal yang berbeda.Jadi sekarang jika anda ingin tahu jika suatu file yang ada pada pergi, aku akan lebih memilih cara terbaik adalah:
Apa jawaban yang lain tidak terjawab, bahwa jalan yang diberikan untuk fungsi yang benar-benar bisa menjadi sebuah direktori. Berikut fungsi membuat yakin, bahwa jalan itu benar-benar sebuah file.
`` func fileExists(string filename) bool { info, err := os.Stat(filename) jika os.IsNotExist(err) { kembali palsu } kembali !info.IsDir() }
``
Hal lain untuk menunjukkan: kode Ini masih bisa menyebabkan kondisi balapan, di mana thread lain atau proses menghapus atau menciptakan file yang ditentukan, sedangkan fileExists fungsi berjalan.
Jika anda're khawatir tentang hal ini, gunakan mengunci benang, membuat akses ke fungsi ini atau gunakan inter-proses semaphore jika beberapa aplikasi yang terlibat. Jika aplikasi lain yang terlibat, di luar kendali anda, anda're beruntung, saya kira.