私はgolang(初心者)を学んでおり、googleとstackoverflowの両方で検索していますが、答えが見つからなかったので、すでに尋ねられたらすみませんが、golangに存在しない場合はどうすればmkdirできますか?.
たとえば、ノードでは、関数 ensureDirSync でfs-extraを使用します(ブロックがもちろん関係ない場合)
fs.ensureDir("./public");
私は2つの方法に出くわしました:
ディレクトリの存在を確認し、存在しない場合は作成します。
if _, err := os.Stat(path); os.IsNotExist(err) {
os.Mkdir(path, mode)
}
ディレクトリを作成して、問題を無視しようとします。
_ = os.Mkdir(path, mode)
さて、これのおかげでわかった question/answer
import(
"os"
"path/filepath"
)
newpath := filepath.Join(".", "public")
os.MkdirAll(newpath, os.ModePerm)
MkdirAllは必要な親とともにpathという名前のディレクトリを作成し、
nil
を返すか、error
を返します。
これは、同じことを達成するための1つの代替手段ですが、2つの別個の「check ..and .. create」操作が原因で発生する競合状態を回避します。
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
}
}