设置 os.Mkdir 权限

sir*_*nga 5 go

我正在尝试使用 os.Mkdir 创建具有某些权限的目录,但由于某种原因我无法使其工作。

我的测试程序是:

package main

import (
        "log"
        "os"
)

func main() {                 
    err := os.Mkdir("testdir", 0775)
    if err != nil {              
        log.Print(err)
    }
}
Run Code Online (Sandbox Code Playgroud)

但是创建的目录默认有0755权限:

drwxr-xr-x 2 user user 4096 Jan 10 10:14 testdir
Run Code Online (Sandbox Code Playgroud)

shell 中的 chmod 工作得很好,所以我不确定为什么 Go 程序不工作。

T. *_*rie 4

创建文件时,类Unix系统使用权限掩码(umask)来创建默认权限。

如果值为umask,则最多0022将创建具有权限的新目录。新文件最多0755有权限。0644

如果要创建具有权限的新目录0775,则必须将 umask 值设置为0002

另一种解决此问题的方法是在创建文件后修改权限:使用默认权限创建文件os.Mkdir,然后使用 修改这些权限os.Chmod

  • @siritinga:Go 正在做它所说的事情,并且正在请求使用您设置的权限创建文件。您的操作系统正在使用 Go 控制之外的 umask“屏蔽”权限。这就是 POSIX 系统的工作原理,如果不了解您所使用的底层系统,您就无法长期生存。 (2认同)