Ich lerne Golang (Anfänger) und habe sowohl auf Google als auch auf Stackoverflow gesucht, aber ich konnte keine Antwort finden. Entschuldigen Sie mich, wenn Sie bereits gefragt wurden, aber wie kann ich mkdir, wenn es nicht in Golang existiert.
Zum Beispiel würde ich im Knoten fs-extra mit der Funktion sureDirSync verwenden (wenn das Blockieren natürlich keine Rolle spielt )
fs.ensureDir("./public");
mode
ist, siehe: golang.org/pkg/os/#FileMode . Sie möchten wahrscheinlichos.ModeDir
als Wert verwenden.mode
, könnten Sie ,os.Mkdir("dirname", 0700)
wenn Sie in das Verzeichnis aus dem gleichen Programm zu schreiben , in der Lage sein wollen, finden Sie diese für weitere Details.os.ModeDir
. Das neue Verzeichnis verfügt nicht über genügend Berechtigungen. Ich fand nuros.ModePerm
für mich gearbeitet. Welches ist gleichbedeutend mit0777
oderdrwxr-xr-x
. Ich denke, die Berechtigungen können etwas niedriger sein, haben es0666
aber nicht geschafft.Okay, ich habe es dank dieser Frage / Antwort herausgefunden
import( "os" "path/filepath" ) newpath := filepath.Join(".", "public") os.MkdirAll(newpath, os.ModePerm)
quelle
filepath.Dir("path/to/file")
des vollständigen Pfads zur Datei ist in meinen Augen ein guter Ansatz.Sie können
os.Stat
damit überprüfen, ob ein bestimmter Pfad vorhanden ist.Wenn dies nicht der Fall ist, können Sie es
os.Mkdir
zum Erstellen verwenden.quelle
Dies ist eine Alternative, um dasselbe zu erreichen, aber es vermeidet Rennbedingungen, die durch zwei unterschiedliche "Prüfen .. und .. Erstellen" -Operationen verursacht werden.
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 } }
quelle
Ich habe festgestellt, dass es für mich funktioniert:
//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) }
Ich mag die Portabilität davon.
quelle