理解Go 中的os.FileMode 函數:從整數轉換權限
Go 中的os.FileMode 函數允許開發者設定檔案權限標誌。然而,關於它如何處理整數、八進制數和其他格式的權限轉換的問題出現了。
最初報告為涉及十進制和八進制值的權限錯誤,根本問題源自於輸入的基本格式數字。 Go 將 os.FileMode 的所有輸入視為整數,無論任何前綴或格式為何。
澄清一下,呼叫 os.FileMode(700) 不會導致八進位解釋,而是保留整數值 700。 '--w-rwxr--' 權限(八進位 274),實際結果是 '--w-r-xr--' (八進位 254)。
要解決這個問題,請始終將整數指定為透過在八進位值前面加上 0 來取得八進位值。在下面的範例中,os.FileMode(0700) 按預期正確設定了權限:「-rwx-----」(八進位為 700)。
或者,使用以下程式碼手動將十進位值700 轉換為八進位:
<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>
go 文件強調FileMode 類型是uint32,其中9 個LSB 表示文件權限,前12 位元表示特殊權限文件功能。在 os.FileMode 中使用不含前導八進位分隔符號的十進位值可能會因基本解釋而觸發意外行為。
因此,為了避免混淆並確保正確的權限設置,請始終遵循以下準則:
以上是如何正確轉換 Go 的 os.FileMode 中的權限值的詳細內容。更多資訊請關注PHP中文網其他相關文章!