Відповіді:
// exists returns whether the given file or directory exists
func exists(path string) (bool, error) {
_, err := os.Stat(path)
if err == nil { return true, nil }
if os.IsNotExist(err) { return false, nil }
return false, err
}
Відредаговано, щоб додати обробку помилок.
panic
фактичний об'єкт типу "виняток". Ви можете «зловити» за допомогою дзвінка на recover
. Явне повернення err
як другого значення повернення є надзвичайно поширеною, ідіоматичною технікою Go. Дивіться: golang.org/doc/effective_go.html#errors
if _, err := os.Stat("./conf/app.ini"); err == nil { /*exists*/ } else { /*not exists or some other error*/ }
Ви можете скористатися цим:
if _, err := os.Stat("./conf/app.ini"); err != nil {
if os.IsNotExist(err) {
// file does not exist
} else {
// other error
}
}
Дивіться: http://golang.org/pkg/os/#IsNotExist
Більше FYI, оскільки я озирнувся кілька хвилин, думаючи, що моє питання буде швидким пошуком.
Як перевірити, чи шлях представляє існуючий каталог у Go?
Це була найпопулярніша відповідь у моїх результатах пошуку, але тут і в інших місцях рішення забезпечують лише перевірку існування. Щоб перевірити, чи path
являє собою існуючий каталог, я легко знайшов:
path := GetSomePath();
if stat, err := os.Stat(path); err == nil && stat.IsDir() {
// path is a directory
}
Частиною моєї проблеми було те, що я очікував, що path/filepath
пакет містить функцію isDir ().
Простий спосіб перевірити, чи існує файл чи ні:
if _, err := os.Stat("/path/to/whatever"); os.IsNotExist(err) {
// path/to/whatever does not exist
}
if _, err := os.Stat("/path/to/whatever"); err == nil {
// path/to/whatever exists
}
Джерела:
Існує простий спосіб перевірити, чи існує ваш файл чи ні:
if _, err := os.Stat("./conf/app.ini"); err != nil {
if os.IsNotExist(err) {
..... //Shows error if file not exists
} else {
..... // Shows success message like file is there
}
}
f, err := os.Open(name)
або,f, err := os.OpenFile(name,os.O_CREATE|os.O_EXCL, mode)
а потім перевіртеos.IsNotExist(err)
).