小编典典

如何正确实例化os.FileMode

go

我看到了无数的示例和教程,这些示例和教程展示了如何通过仅设置文件的权限位来创建文件,并且所有这些文件都“作弊”。我想知道/找出如何在创建/更新文件期间正确实例化os.FileMode以提供给编写者。

下面是一个简单的示例:

func FileWrite(path string, r io.Reader, uid, gid int, perms string) (int64, error){
    w, err := os.OpenFile(path, os.O_WRONLY|os.O_CREATE|os.O_TRUNC, 0664)
    if err != nil {
        if path == "" {
            w = os.Stdout
        } else {
            return 0, err
        }
    }
    defer w.Close()

    size, err := io.Copy(w, r)

    if err != nil {
        return 0, err
    }
    return size, err
}

在上面的基本功能中,权限位0664被设置,尽管这有时可能有意义,但我还是希望有一种正确设置文件模式的正确方法。从上面可以看到,一个常见的示例是UID /
GID是已知的,并且已经作为int值提供了,而perms是八进制数字,以前已被收集并作为字符串插入到db中。


阅读 353

收藏
2020-07-02

共1个答案

小编典典

FileMode只是一个uint32。http://golang.org/pkg/os/#FileMode

通过常量设置不是“欺骗”,您可以像使用其他数值一样使用它。如果您不使用常量,则可以对有效数值进行转换:

mode := int(0777)
os.FileMode(mode)
2020-07-02