Я надеюсь, что не пропустил сообщение с тем же вопросом.
Я бы хотел улучшить обнаружение обработчика ошибок, основываясь на конкретной ошибке, сгенерированной во время выполнения.
Пытаясь показать мою проблему простым способом, я пытаюсь определить функцию «createDirectory», которая использует стандартный пакет «os» и его функцию os.Mkdir. Вот моя проблема, я хотел бы показать правильное сообщение пользователю в соответствии с регистром:
- Если путь не существует (родительская структура отсутствует), то сообщение «Родитель не найден»
- Если папка уже создана, то «Папка уже создана»
- Если папка создана, то «Папка создана»
Используя пакет «syscall» в этом случае, я могу достичь своей цели, но теперь мне приходится решать другую проблему, иметь дело с операционной системой, в которой запущено мое приложение, что увеличивает сложность распространения. , потому что мое приложение должно работать на Windows, Mac и Linux.
Буду признателен за любую идею или предложение, как справляться с подобными ситуациями.
Спасибо.
func main() {
var err error
err = createDirectory("/tmp/test1")
if err != nil {
log.Print(err)
}
}
// Linux Version
func createDirectory(dirPath string) error {
var err error
err = os.Mkdir(dirPath, 0777)
if err != nil {
e, ok := err.(*os.PathError)
if ok && e.Err == syscall.EEXIST {
log.Print("Folder already exists")
}
}
return err
}
//Windows version
func createDirectory(dirPath string) error {
var err error
err = os.Mkdir(dirPath, 0777)
if err != nil {
e, ok := err.(*os.PathError)
if ok && e.Err == syscall.ERROR_ALREADY_EXISTS {
log.Print("Folder already exists")
}
}
return err
}
Было бы здорово, если бы я мог найти способ или пакет, чтобы избежать работы с кодовой базой в ОС