Eine häufige Falle bei der Go-Programmierung ist der subtile Unterschied in den Berechtigungen, wenn os.FileMode zum Festlegen von Dateiberechtigungen verwendet wird. Der Aufruf von os.FileMode mit ganzzahligen Werten wie 700 kann zu unerwarteten Ergebnissen führen.
os.FileMode akzeptiert ganzzahlige Werte zum Festlegen von Dateiberechtigungen. Es gibt jedoch einen entscheidenden Unterschied zwischen dezimaler und oktaler Darstellung. In Go werden ganzzahlige Literale ohne führende „0“ als Dezimalzahlen behandelt. Um eine Oktalzahl anzugeben, müssen Sie ihr „0“ voranstellen, wie in „0700“.
Die Funktion os.FileMode ordnet die niedrigsten 9 Bits einer zu Ganzzahl zu den Standard-Unix-Dateiberechtigungsflags. Daher werden bei Verwendung einer Ganzzahldarstellung die führenden Bits ignoriert. Beispielsweise verfügt die Ganzzahl 700 (1-010-111-100 im Binärformat) über die folgenden Berechtigungen:
0700 -> -rwx------
Wenn eine Ganzzahl ohne die „0“ Das Präfix wird für os.FileMode bereitgestellt und als Dezimalzahl interpretiert. In diesem Fall werden die führenden Bits nicht ignoriert. Die Dezimalzahl 700 wird in Binärzahl 1274 übersetzt, was kein gültiger Unix-Berechtigungscode ist.
Beim Aufruf von os.FileMode(700) ist das Ergebnis „-w-r-xr“. --“ (Oktal 0254) anstelle des erwarteten „-rwx------“ (Oktal 0700). Dies liegt daran, dass die Ganzzahl 700 als Dezimalzahl und nicht als Oktalzahl interpretiert wird.
Um Dateiberechtigungen korrekt festzulegen, sollten Sie beim Aufruf von os.FileMode immer Oktaldarstellungen mit führender „0“ verwenden. Beispielsweise erzeugt os.FileMode(0700) die korrekten „-rwx------“-Berechtigungen.
Das obige ist der detaillierte Inhalt vonVerstehen der Interpretation nichtoktaler Ganzzahlen in os.FileMode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!