web-dev-qa-db-fra.com

mkdir sinon existe en utilisant golang

J'apprends le golang (débutant) et j'ai cherché à la fois sur google et sur stackoverflow, mais je ne pouvais pas trouver de réponse, alors excusez-moi si j'ai déjà posé la question, mais comment puis-je mkdir s'il n'existe pas dans golang.

Par exemple, dans le noeud, j'utiliserais fs-extra avec la fonction EnsureDirSync (si le blocage n'a pas d'importance, bien sûr)

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

J'ai couru de deux manières:

  1. Vérifiez l'existence du répertoire et créez-le s'il n'existe pas:

    if _, err := os.Stat(path); os.IsNotExist(err) {
        os.Mkdir(path, mode)
    }
    
  2. Essayez de créer le répertoire et ignorez tous les problèmes:

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

Ok je l'ai compris grâce à ceci question/réponse

import(
    "os"
    "path/filepath"
)

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

MkdirAll crée un répertoire nommé chemin, ainsi que tous les parents nécessaires, et renvoie nil, ou bien renvoie un error .

86
Alfred

Vous pouvez utiliser os.Stat pour vérifier si un chemin donné existe.
Si ce n'est pas le cas, vous pouvez utiliser os.Mkdir pour le créer.

7
Mr. Llama

C'est une alternative pour atteindre le même but, mais cela évite la situation critique provoquée par deux opérations distinctes "vérifier .. et .. créer".

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