Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Cara Menukar Nilai Kebenaran dengan betul dalam os.FileMode untuk Go

Cara Menukar Nilai Kebenaran dengan betul dalam os.FileMode untuk Go

Barbara Streisand
Barbara Streisandasal
2024-10-24 18:26:02709semak imbas

How to Correctly Convert Permission Values in os.FileMode for Go

Memahami os.FileMode Function dalam Go: Menukar Kebenaran daripada Integer

Fungsi os.FileMode dalam Go membolehkan pembangun menetapkan bendera kebenaran fail . Walau bagaimanapun, soalan telah timbul tentang cara ia mengendalikan penukaran kebenaran daripada integer, nombor perlapanan dan format lain.

Pada asalnya dilaporkan sebagai pepijat kebenaran yang melibatkan nilai perpuluhan dan perlapanan, isu asas berpunca daripada format asas input nombor. Go merawat semua input kepada os.FileMode sebagai integer, tanpa mengira sebarang awalan atau pemformatan.

Untuk menjelaskan, memanggil os.FileMode(700) tidak menghasilkan tafsiran oktal tetapi mengekalkan nilai integer 700. Walaupun jangkaan daripada kebenaran '--w-rwxr--' (274 dalam perlapanan), hasil sebenar ialah '--w-r-xr--' (254 dalam perlapanan).

Untuk menangani perkara ini, sentiasa nyatakan integer sebagai nilai perlapanan dengan meletakkan awalannya dengan 0. Dalam contoh di bawah, os.FileMode(0700) menetapkan kebenaran dengan betul seperti yang dijangkakan: '-rwx------' (700 dalam perlapanan).

Sebagai alternatif, menukar nilai perpuluhan 700 kepada perlapanan secara manual menggunakan kod berikut:

<code class="go">mode := uint(0) // 0 is the octal separator
mode |= 1 << 6 // read permission for owner
mode |= 1 << 5 // write permission for owner
mode |= 1 << 3 // execute permission for owner

fmt.Println(os.FileMode(mode).String()) // Output: -rwx------</code>

Dokumen go menyerlahkan bahawa jenis FileMode ialah uint32, dengan sembilan LSB mewakili kebenaran fail dan 12 bit teratas menunjukkan ciri fail khas . Menggunakan nilai perpuluhan dalam os.FileMode tanpa pemisah perlapanan utama boleh mencetuskan gelagat yang tidak dijangka disebabkan oleh tafsiran asas.

Oleh itu, untuk mengelakkan kekeliruan dan memastikan tetapan kebenaran yang betul, sentiasa ikut garis panduan ini:

  • Anggap input kepada os.FileMode sebagai integer dan elakkan menggunakan nombor perpuluhan tanpa awalan pemisah oktal.
  • Gunakan os.FileMode(0700) atau kaedah penukaran integer-to-octal yang setara untuk menentukan nilai kebenaran oktal.

Atas ialah kandungan terperinci Cara Menukar Nilai Kebenaran dengan betul dalam os.FileMode untuk 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