Mkdir, если не существует, используя golang
Я изучаю golang (новичок), и я искал как google, так и stackoverflow, но я не мог найти ответ, поэтому извините меня, если его уже спросили, но как я могу mkdir, если не существует в golang.
Например, в node я бы использовал fs-extra с функцией protectDirSync (если блокирование, конечно, не вызывает беспокойства)
fs.ensureDir("./public");
Ответы
Ответ 1
Я столкнулся двумя способами:
-
Проверьте существование каталога и создайте его, если он не существует:
if _, err := os.Stat(path); os.IsNotExist(err) {
os.Mkdir(path, mode)
}
-
Попытка создать каталог и игнорировать любые проблемы:
_ = os.Mkdir(path, mode)
Ответ 2
Хорошо, я понял это благодаря этому вопросу/ответу
import(
"os"
"path/filepath"
)
newpath := filepath.Join(".", "public")
os.MkdirAll(newpath, os.ModePerm)
MkdirAll создает каталог с именем path вместе со всеми необходимыми родителями и возвращает nil
, либо возвращает error
.
Ответ 3
Вы можете использовать os.Stat
чтобы проверить, существует ли данный путь.
Если это не так, вы можете использовать os.Mkdir
для его создания.
Ответ 4
Это одна альтернатива для достижения того же самого, но она позволяет избежать состояния гонки, вызванного наличием двух разных операций "проверить.. и.. создать".
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
}
}