Go 设置os.Mkdir权限

Go 设置os.Mkdir权限,go,Go,我正在尝试使用os.Mkdir创建具有特定权限的目录,但由于某些原因,我无法使其正常工作 我的测试计划是: package main import ( "log" "os" ) func main() { err := os.Mkdir("testdir", 0775) if err != nil { log.Print(err) } } 但是,创建的目录具

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

我的测试计划是:

package main

import (
        "log"
        "os"
)

func main() {                 
    err := os.Mkdir("testdir", 0775)
    if err != nil {              
        log.Print(err)
    }
}
但是,创建的目录具有默认的0755权限:

drwxr-xr-x 2 user user 4096 Jan 10 10:14 testdir

shell中的chmod工作正常,因此我不确定Go程序为什么不工作。

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

umask值为0022时,将创建权限最多为0755的新目录。新文件的权限最多为0644

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


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

运行umask命令时会出现什么?0022是这样说的:在创建文件后添加权限os.Chmodtestdir,0777,但我不确定这是否是一个好的解决方案。是的,这是关于与当前进程的umask值的交互,因此通常与Go或StackOverflow无关。请阅读一本关于在Unix环境中工作的介绍性书籍。感谢您的回复,但是在我的Go程序中,我指定我需要对创建的文件拥有0775权限,而该文件无法工作。也许它不起作用,我以后必须更改它,但使用非功能选项似乎很尴尬。os.Mkdir无法创建权限大于mask的文件,但os.Chmod可以?@siritinga,这正是您的问题:操作系统阻止您创建权限为0775的目录。我刚刚试着在我的笔记本电脑上运行umask 0002,将umask从0022修改为0002,我向你保证它可以工作。这是Unix的问题,不是Go的错。@Iwan os.Chmod修改现有文件的权限,os.Mkdir创建新文件。umask仅适用于创建操作,希望如此,这就是为什么在创建工作后进行chmoding的原因。@siritinga:Go正在做它在这里所做的事情,并且正在请求使用您设置的权限创建文件。您的操作系统正在使用Go无法控制的umask屏蔽权限。这就是POSIX系统的工作原理,如果不了解所使用的底层系统,您将无法长期使用。