Die os.FileMode-Funktion in Go verstehen: Berechtigungen aus ganzen Zahlen konvertieren
Mit der os.FileMode-Funktion in Go können Entwickler Dateiberechtigungs-Flags festlegen . Es sind jedoch Fragen dazu aufgekommen, wie Berechtigungskonvertierungen von Ganzzahlen, Oktalzahlen und anderen Formaten gehandhabt werden.
Ursprünglich als Berechtigungsfehler bei Dezimal- und Oktalwerten gemeldet, ist das zugrunde liegende Problem auf das Basisformat der Eingabe zurückzuführen Nummer. Go behandelt alle Eingaben in os.FileMode als ganze Zahlen, unabhängig von Präfixen oder Formatierungen.
Zur Verdeutlichung: Der Aufruf von os.FileMode(700) führt nicht zu einer oktalen Interpretation, sondern behält den ganzzahligen Wert 700 bei. Entgegen der Erwartung von „--w-rwxr--“-Berechtigungen (274 in Oktal) ist das tatsächliche Ergebnis „--w-r-xr--“ (254 in Oktal).
Um dies zu beheben, geben Sie immer Ganzzahlen als an Oktalwerte, indem ihnen 0 vorangestellt wird. Im folgenden Beispiel legt os.FileMode(0700) die Berechtigungen wie erwartet korrekt fest: '-rwx------' (700 in Oktalform).
Alternativ: Manuelles Konvertieren des Dezimalwerts 700 in Oktal mithilfe des folgenden Codes:
<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>
In den Go-Dokumenten wird hervorgehoben, dass der FileMode-Typ ein uint32 ist, wobei die neun LSB Dateiberechtigungen darstellen und die oberen 12 Bits spezielle Dateifunktionen angeben . Die Verwendung von Dezimalwerten in os.FileMode ohne das führende Oktaltrennzeichen kann aufgrund der Basisinterpretation zu unerwartetem Verhalten führen.
Befolgen Sie daher immer die folgenden Richtlinien, um Verwirrung zu vermeiden und korrekte Berechtigungseinstellungen sicherzustellen:
Das obige ist der detaillierte Inhalt vonSo konvertieren Sie Berechtigungswerte in os.FileMode für Go korrekt. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!