Go の os.FileMode 関数について: 整数からのアクセス許可の変換
Go の os.FileMode 関数を使用すると、開発者はファイル アクセス許可フラグを設定できます。ただし、整数、8 進数、その他の形式からのパーミッション変換をどのように処理するかについて疑問が生じています。
当初は 10 進値と 8 進数値に関連するパーミッションのバグとして報告されましたが、根本的な問題は入力の基本フォーマットに起因しています。番号。 Go は、プレフィックスや書式設定に関係なく、os.FileMode へのすべての入力を整数として扱います。
明確にするために、os.FileMode(700) を呼び出しても 8 進数解釈は行われませんが、整数値 700 が保持されます。 '--w-rwxr--' 権限 (8 進数で 274) の場合、実際の結果は '--w-r-xr--' (8 進数で 254) になります。
これに対処するには、常に次のように整数を指定します。 8 進数の値にプレフィックス 0 を付けます。以下の例では、os.FileMode(0700) は、期待どおりにアクセス許可を正しく設定します: '-rwx------' (8 進数の 700)。
または、次のコードを使用して、10 進数値 700 を 8 進数値に手動で変換します:
<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 であり、LSB の 9 ビットがファイルのアクセス許可を表し、上位 12 ビットが特殊なファイル機能を示していることが強調されています。 。 os.FileMode で先頭の 8 進数区切り文字を使用せずに 10 進値を使用すると、基本解釈により予期しない動作が発生する可能性があります。
したがって、混乱を避け、適切な権限設定を確保するには、常に次のガイドラインに従ってください:
以上がGo の os.FileMode で権限値を正しく変換する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。