Go 程式設計中常見的陷阱是使用 os.FileMode 設定檔案權限時權限的細微差別。使用整數值(例如 700)呼叫 os.FileMode 可能會導致意外結果。
os.FileMode 接受整數值來設定檔案權限。然而,十進制和八進位表示之間存在重要區別。在 Go 中,沒有前導「0」的整數文字被視為十進制數字。若要指定八進位數,必須在其前面加上“0”,如“0700”。
os.FileMode 函數會對應一個檔案的最低 9 位元標準 Unix 檔案權限標誌的整數。因此,當使用整數表示時,前導位將被忽略。例如,整數700(二進位為1-010-111-100)具有以下權限:
0700 -> -rwx------
如果是不帶「0」的整數前綴提供給os.FileMode,它被解釋為十進制數。在這種情況下,不會忽略前導位。十進制數字 700 轉換為二進位 1274,這不是有效的 Unix 權限代碼。
呼叫os.FileMode(700) 時,結果為「-w-r-xr」 --」(八進位0254)而不是預期的「-rwx---- -」(八進位0700)。這是因為整數700 被解釋為十進位而不是八進位。
要正確設定檔案權限,在呼叫os.FileMode 時應始終使用前導「0」的八進位表示形式。
以上是了解 os.FileMode 中非八進制整數的解釋的詳細內容。更多資訊請關注PHP中文網其他相關文章!