如果使用golang不存在mkdir

时间:2016-06-20 22:03:35

标签: go mkdir

我正在学习golang(初学者),我一直在搜索google和stackoverflow,但是我找不到答案,如果已经被问过,请原谅我,但如果golang中不存在mkdir怎么办。

例如在节点中我会使用带有函数ensureDirSync的fs-extra(如果阻塞当然没有问题)

fs.ensureDir("./public");

6 个答案:

答案 0 :(得分:71)

好的,我想通了这个question/answer

import(
    "os"
    "path/filepath"
)

newpath := filepath.Join(".", "public")
os.MkdirAll(newpath, os.ModePerm)

答案 1 :(得分:69)

我遇到过两种方式:

  1. 检查目录是否存在,如果目录不存在则创建:

    if _, err := os.Stat(path); os.IsNotExist(err) {
        os.Mkdir(path, mode)
    }
    
  2. 尝试创建目录并忽略任何问题:

    _ = os.Mkdir(path, mode)
    

答案 2 :(得分:7)

您可以使用os.Stat检查指定路径是否存在 如果没有,您可以使用os.Mkdir创建它。

答案 3 :(得分:0)

这是达到相同目的的一种选择,但它避免了由于执行两个不同的“检查..和..创建”操作而导致的竞争状态。

package main

import (
    "fmt"
    "os"
)

func main()  {
    if err := ensureDir("/test-dir"); err != nil {
        fmt.Println("Directory creation failed with error: " + err.Error())
        os.Exit(1)
    }
    // Proceed forward
}

func ensureDir(dirName string) error {

    err := os.Mkdir(dirName, os.ModeDir)

    if err == nil || os.IsExist(err) {
        return nil
    } else {
        return err
    }
}

答案 4 :(得分:0)

所以我发现对我有用的是:

//Get the base file dir
path, err := os.Getwd()
if err != nil {
    log.Println("error msg", err)
}

//Create output path
outPath:= filepath.Join(path, "output")

//Create dir output using above code
if _, err := os.Stat(outPath); os.IsNotExist(err) {
    os.Mkdir(outPath, 0755)
}

我喜欢它的便携性。

答案 5 :(得分:0)

或者您可以尝试创建文件并检查返回的错误不是“文件存在”错误

if err := os.Mkdir(path, mode); err != nil && !os.IsExist(err) {
    log.Fatal(err)
}