более конкретно обрабатывать ошибки - PullRequest
0 голосов
/ 09 июля 2019

Я надеюсь, что не пропустил сообщение с тем же вопросом.

Я бы хотел улучшить обнаружение обработчика ошибок, основываясь на конкретной ошибке, сгенерированной во время выполнения.

Пытаясь показать мою проблему простым способом, я пытаюсь определить функцию «createDirectory», которая использует стандартный пакет «os» и его функцию os.Mkdir. Вот моя проблема, я хотел бы показать правильное сообщение пользователю в соответствии с регистром:

  1. Если путь не существует (родительская структура отсутствует), то сообщение «Родитель не найден»
  2. Если папка уже создана, то «Папка уже создана»
  3. Если папка создана, то «Папка создана»

Используя пакет «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
}

Было бы здорово, если бы я мог найти способ или пакет, чтобы избежать работы с кодовой базой в ОС

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...