files - mkdir si no existe usando golang
files golang (4)
Bien, lo descubrí gracias a esta question/answer
import(
"os"
"path/filepath"
)
newpath := filepath.Join(".", "public")
os.MkdirAll(newpath, os.ModePerm)
MkdirAll crea un directorio llamado ruta, junto con los padres necesarios, y devuelve
nil
, o devuelve unerror
.
Estoy aprendiendo golang (principiante) y he estado buscando tanto en google como en stackoverflow, pero no pude encontrar una respuesta, así que discúlpeme si ya me lo preguntaron, pero ¿cómo puedo mkdir si no existe en golang?
Por ejemplo, en el nodo, usaría fs-extra con la función ensureDirSync (si el bloqueo no es una preocupación, por supuesto)
fs.ensureDir("./public");
Esta es una alternativa para lograr lo mismo, pero evita la condición de carrera causada por tener dos operaciones distintas de "verificar ... y ... crear".
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
}
}
Me he encontrado con dos maneras:
-
Verifique la existencia del directorio y créelo si no existe:
if _, err := os.Stat(path); os.IsNotExist(err) { os.Mkdir(path, mode) }
-
Intente crear el directorio e ignore cualquier problema:
_ = os.Mkdir(path, mode)