Go中的文件权限掩码

1 permissions go

我最近玩Go中的文件模式和权限,并在获取它时偶然发现了输出.

以下代码:

for _, file := range files {
    fmt.Println(file.Mode()) 
}  
Run Code Online (Sandbox Code Playgroud)

产生输出:

drwx------
Lrwxr-xr-x
drwxr--r--
drwx------
drwx------
prw-r--r--
Srw-rw-rw-
Srw-rw-rw-
-rw-r--r--
Run Code Online (Sandbox Code Playgroud)

我的问题是如何获得0777等数字的权限.

有没有像在这个答案中提供的python类似的方式:我如何获得文件的权限掩码?

icz*_*cza 6

获得文件模式(使用FileInfo.Mode())后,请使用该FileMode.Perm()方法.这将返回一个类型的值,os.FileMode该值具有uint32其基础类型.

您正在寻找的格式(例如0777)位于基数8.您可以使用例如fmt.Printf()动词%o以八进制格式打印数字(基数为8).使用宽度4使其成为4位数,并使用一个标志0使其用0's 填充.所以打印文件权限的格式字符串:"%04o".

所以打印出来像这样:

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

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

示例输出:

-rw-rw-r-- 0664 play.go
drwxrwxr-x 0775 subplay
Run Code Online (Sandbox Code Playgroud)