Rumah > Artikel > pembangunan bahagian belakang > Mengapakah fungsi `os.OpenFile` melemparkan ralat "deskriptor fail buruk" apabila melampirkan pada fail log dalam Go?
Apabila cuba menambah fail pengelogan dalam rutin Go, pengguna mungkin menghadapi ralat berikut:
write ./log.log: bad file descriptor
Walaupun memastikan bahawa fail sasaran wujud dan mempunyai kebenaran yang sesuai, isu ini berterusan. Percubaan awal untuk menyelesaikan isu menggunakan mutex gagal.
Penyelesaian terletak pada penambahan bendera O_WRONLY pada panggilan os.OpenFile:
if f, err := os.OpenFile("./log.log", os.O_APPEND|os.O_WRONLY, os.ModeAppend); err != nil { /*[...]*/ }
Menurut dokumentasi Linux semasa terbuka, salah satu daripada mod akses berikut mesti disertakan dalam hujah bendera: O_RDONLY, O_WRONLY atau O_RDWR. Permintaan ini untuk membuka fail masing-masing dalam mod baca sahaja, tulis sahaja atau baca/tulis.
Secara lalai, panggilan os.OpenFile Go membuka fail dalam mod baca sahaja. Oleh itu, adalah perlu untuk menyatakan secara eksplisit O_WRONLY untuk membenarkan penulisan pada fail pengelogan.
Atas ialah kandungan terperinci Mengapakah fungsi `os.OpenFile` melemparkan ralat "deskriptor fail buruk" apabila melampirkan pada fail log dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!