You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 09:28:57