it-swarm.com.de

mkdir falls nicht vorhanden mit golang

Ich lerne Golang (Anfänger) und habe sowohl in Google als auch in Stackoverflow gesucht, aber ich konnte keine Antwort finden. Entschuldigen Sie, wenn ich schon gefragt wurde, aber wie kann ich mkdir, wenn es nicht in Golang gibt?.

Zum Beispiel würde ich in Node fs-extra mit der Funktion verifyDirSync verwenden (wenn das Blockieren natürlich keine Rolle spielt)

fs.ensureDir("./public");
48
Alfred

Ich bin auf zwei Arten gelaufen:

  1. Überprüfen Sie, ob das Verzeichnis vorhanden ist, und erstellen Sie es, falls es nicht vorhanden ist:

    if _, err := os.Stat(path); os.IsNotExist(err) {
        os.Mkdir(path, mode)
    }
    
  2. Versuchen Sie, das Verzeichnis zu erstellen und alle Probleme zu ignorieren:

    _ = os.Mkdir(path, mode)
    
77
Austin Hanson

Okay, ich habe es herausgefunden, dank diesem Frage/Antwort

import(
    "os"
    "path/filepath"
)

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

MkdirAll erstellt ein Verzeichnis mit dem Namen path sowie alle erforderlichen übergeordneten Elemente und gibt nil zurück oder gibt ein error zurück. .

86
Alfred

Sie können os.Stat um zu überprüfen, ob ein bestimmter Pfad existiert.
Wenn dies nicht der Fall ist, können Sie os.Mkdir um es zu erstellen.

7
Mr. Llama

Dies ist eine Alternative, um dasselbe zu erreichen, vermeidet jedoch die Racebedingung, die durch zwei unterschiedliche "check ..and .. create" -Operationen verursacht wird.

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
    }
}
0