Go プログラミングでよくある落とし穴は、os.FileMode を使用してファイルのアクセス許可を設定するときのアクセス許可の微妙な違いです。 700 などの整数値を指定して os.FileMode を呼び出すと、予期しない結果が生じる可能性があります。
os.FileMode は、ファイルのアクセス許可を設定するために整数値を受け入れます。ただし、10 進数表現と 8 進数表現の間には決定的な違いがあります。 Go では、先頭に「0」のない整数リテラルは 10 進数として扱われます。 8 進数を指定するには、「0700」のように「0」を接頭辞として付ける必要があります。
os.FileMode 関数は、バイナリ表現の下位 9 ビットをマップします。標準 Unix ファイル許可フラグの整数。したがって、整数表現を使用する場合、先頭ビットは無視されます。たとえば、整数 700 (バイナリで 1-010-111-100) には次の権限があります:
0700 -> -rwx------
「0」のない整数の場合prefix が os.FileMode に提供されると、10 進数として解釈されます。この場合、先頭ビットは無視されません。 10 進数 700 は 2 進数 1274 に変換されますが、これは有効な Unix 権限コードではありません。
os.FileMode(700) を呼び出すと、結果は「-w-r-xr」になります。予想される「-rwx------」(8 進数 0700) の代わりに --" (8 進数 0254)。これは、整数 700 が 8 進数ではなく 10 進数として解釈されるためです。
ファイルのアクセス許可を正しく設定するには、os.FileMode を呼び出すときに常に先頭に「0」を付けた 8 進数表現を使用する必要があります。たとえば、os.FileMode(0700) は正しい「-rwx------」権限を生成します。
以上がos.FileMode での非 8 進整数の解釈を理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。