Apabila menggunakan os.FileMode untuk menetapkan kebenaran fail, pengguna mungkin menghadapi percanggahan antara mod fail yang dijangka dan sebenar. Artikel ini menyelidiki selok-belok menukar kebenaran daripada pelbagai perwakilan kepada bendera fail.
Penggunaan nombor perpuluhan tanpa sifar pendahuluan, seperti 700, dilayan secara berbeza daripada perwakilan perlapanan seperti 0700. Apabila 700 ditafsirkan tanpa sifar pendahuluan, ia tidak dilihat sebagai nombor perlapanan. Sebaliknya, ia dihuraikan sebagai literal integer dengan nilai 448 (7 64 0 8 0 * 1). Apabila ditukar kepada binari menggunakan perwakilan integer ini, nilai yang terhasil ialah 1-010-111-100. Bit tambahan dalam kedudukan pendahulu, yang bukan sebahagian daripada mod fail Linux 9-bit yang dijangkakan, menyebabkan percanggahan.
Os.FileMode Go menjangkakan perwakilan oktal bagi fail mod. Apabila perwakilan perlapanan digunakan, seperti 0700, ia ditafsirkan sebagai nombor asas-8, menghasilkan nilai 448. 9 bit paling ketara nilai ini memetakan keizinan fail, manakala bit selebihnya ditetapkan dan menunjukkan khas ciri fail yang tidak relevan untuk perbincangan ini.
Kekeliruan timbul kerana perwakilan binari 1-010-111-100 bagi 700 perpuluhan tidak sepadan dengan kebenaran yang dijangkakan 0700 . Dalam kes ini, ia menghasilkan kebenaran 0254 (-rw-r-xr-) dan bukannya 0274 (-rwx------) seperti yang dijangkakan.
Untuk menyelesaikan isu ini, adalah penting untuk menggunakan sifar pendahuluan apabila menentukan nombor perlapanan untuk FileMode. Ini memastikan bahawa Go mentafsir input sebagai nilai perlapanan dan bukan sebagai nombor perpuluhan. Dengan mengikuti garis panduan ini, anda boleh mengelakkan percanggahan dalam kebenaran fail.
Atas ialah kandungan terperinci Bilakah Kebenaran Fail Ditetapkan oleh os.FileMode Berbeza daripada Jangkaan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!