Un piège courant dans la programmation Go est la différence subtile dans les autorisations lors de l'utilisation d'os.FileMode pour définir les autorisations de fichiers. L'appel de os.FileMode avec des valeurs entières, telles que 700, peut conduire à des résultats inattendus.
os.FileMode accepte des valeurs entières pour définir les autorisations de fichiers. Cependant, il existe une distinction cruciale entre les représentations décimales et octales. Dans Go, les littéraux entiers sans « 0 » en tête sont traités comme des nombres décimaux. Pour spécifier un nombre octal, vous devez le préfixer par « 0 », comme dans « 0700 ».
La fonction os.FileMode mappe les 9 bits les plus bas d'un entier aux indicateurs d'autorisation de fichier Unix standard. Par conséquent, lors de l’utilisation d’une représentation entière, les bits de tête sont ignorés. Par exemple, l'entier 700 (1-010-111-100 en binaire) a les autorisations suivantes :
0700 -> -rwx------
Si un entier sans le "0" Le préfixe est fourni à os.FileMode, il est interprété comme un nombre décimal. Dans ce cas, les bits de tête ne sont pas ignorés. Le nombre décimal 700 se traduit par le binaire 1274, qui n'est pas un code d'autorisation Unix valide.
Lors de l'appel de os.FileMode(700), le résultat est "-w-r-xr --" (octal 0254) au lieu du "-rwx------" attendu (octal 0700). En effet, l'entier 700 est interprété comme un nombre décimal et non octal.
Pour définir correctement les autorisations de fichiers, vous devez toujours utiliser des représentations octales avec un "0" en tête lorsque vous appelez os.FileMode. Par exemple, os.FileMode(0700) produira les autorisations "-rwx------" correctes.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!