如何在Go语言中获取Linux文件的八进制权限位(非字符串形式)
获取Go中文件权限位的八进制/整数表示
没问题,我来帮你解决这个问题!你现在用m.Mode().Perm()拿到的权限之所以是字符串形式,是因为os.FileMode类型实现了String()方法,fmt.Println会自动调用这个方法输出人类可读的权限字符串。但其实它本质上是一个无符号整数,我们可以直接把它转成整数或者格式化输出成八进制。
直接看修改后的代码:
import "os" import "fmt" func main() { m, err := os.Stat("test.go") // 别忘了处理错误,生产环境可不能忽略哦 if err != nil { fmt.Println("获取文件信息失败:", err) return } perm := m.Mode().Perm() // 输出整数形式的权限 fmt.Println("整数形式:", int(perm)) // 输出带0前缀的标准八进制权限(Unix常用格式) fmt.Printf("带前缀八进制: %#o\n", perm) // 输出不带前缀的八进制 fmt.Printf("无前缀八进制: %o\n", perm) }
运行这段代码后,对应你示例里的-rw-rw-r--权限,输出会是:
整数形式: 436 带前缀八进制: 0664 无前缀八进制: 664
简单解释下:
perm本身是os.FileMode类型,底层是uint32,转成int就能得到十进制整数表示- 用
fmt.Printf的%o格式符可以直接输出八进制,%#o会自动加上0前缀,这和我们平时在Unix系统里看到的权限格式一致
这样就能拿到你想要的八进制或整数形式的权限啦!
内容的提问来源于stack exchange,提问作者cpuNram
相关产品推荐
相关产品推荐

