Должен ли я использовать log.Panic () или log.Fatal () с os.Open? - PullRequest
0 голосов
/ 19 сентября 2019

когда у нас есть:

f, err := os.Open("no-file.txt")
if err != nil {
    log.Panic(err)
}
defer f.Close()

Я думаю, что было бы более разумно использовать log.Panic (err).Правильно?Panic () позволяет отложить f.Close () для выполнения, но log.Fatal () предотвращает это.

Или файл не открывается, если не найден?Я предполагал, что в этом случае не имеет значения, будем ли мы использовать Fatal или Panic.Правильно?

Ответы [ 2 ]

2 голосов
/ 19 сентября 2019

log.Fatal() следует редко использовать в производственных приложениях - если вообще когда-либо - поскольку оно завершает работу всего приложения.log.Panic() паникует после выполнения журнала, что опять-таки редко требуется.

Многие примеры используют их (или, альтернативно, один вызов panic(err)), чтобы сделать код примера короче (чтобы позволитьВы сосредотачиваетесь на том, о чем пример), но они должны использоваться экономно в производственных приложениях.Вместо этого обработайте ошибку «правильно».Это означает, что это зависит от конкретного случая, вы можете зарегистрировать его и вернуть, либо вернуть новую ошибку, либо сделать что-то еще, но сделать с ней только одну вещь (обработать ее только один раз).См. Написание хорошего кода Голанга .

0 голосов
/ 19 сентября 2019

Я предпочитаю log.Panic ().

Log.Panic против log.Fatal по сути является паникой против os.Exit (1).

Выход хуже, чем Panic.Itделает тестирование намного сложнее. С кодом, который выполняет os.Exit, гораздо сложнее. Остановить панику в тесте с помощью восстановления довольно просто.

Итак, лучше выбрать что-то, что имеет меньший потенциалповреждение.

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