2017-01-30 3 views
1

Ich spielte kürzlich mit Dateimodi und Berechtigungen in Go und stolperte über die Ausgabe beim Abrufen.Datei-Erlaubnis-Maske in Go

Der folgende Code:

for _, file := range files { 
    fmt.Println(file.Mode()) 
} 

erzeugt eine Ausgabe:

drwx------ 
Lrwxr-xr-x 
drwxr--r-- 
drwx------ 
drwx------ 
prw-r--r-- 
Srw-rw-rw- 
Srw-rw-rw- 
-rw-r--r-- 

Meine Frage ist, wie kann ich wie 0777 Berechtigungen in Zahlen, usw.

Gibt es eine ähnliche Art und Weise wie in Python in dieser Antwort zur Verfügung gestellt: How can I get a file's permission mask??

Antwort

6

Sobald Sie den Dateimodus (mit FileInfo.Mode()) haben, verwenden Sie die FileMode.Perm() Methode. Dies gibt einen Wert vom Typ os.FileMode zurück, der uint32 als zugrunde liegenden Typ hat.

Das von Ihnen gesuchte Format (z. B. 0777) befindet sich in Basis 8. Sie können z. fmt.Printf() mit dem Verb %o zum Drucken einer Zahl im oktalen Format (Basis 8). Verwenden Sie eine Breite 4, um es 4 Ziffern zu machen, und ein Flag 0, um es mit 0's aufgefüllt zu machen. Also die Format-Zeichenfolge zum Drucken von Dateiberechtigungen: "%04o".

So es wie folgt drucken:

files, err := ioutil.ReadDir(".") 
// Handle err 

for _, file := range files { 
    fmt.Printf("%s %04o %s\n", file.Mode(), file.Mode().Perm(), file.Name()) 
} 

Beispiel Ausgabe:

-rw-rw-r-- 0664 play.go 
drwxrwxr-x 0775 subplay