В команде моей компании у нас много дискуссий о том, как лучше добиться цели. Одна из этих дискуссий была о gometalinter, все в моей команде согласны с тем, что линтеры довольно хороши для поддержания качества исходного кода. Но в gometalinter есть линтер, который мне очень не понравился, и называется он E«rrcheck».

Errcheck — это линтер, который проверяет, проверяете ли вы каждую функцию, которая возвращает ошибку, в 99,9% случаев важно проверять ошибки, но не всегда!

Пример ниже, ясно, что вам нужно проверить ошибку (конкретный сценарий)…

f, err := os.Create("/tmp/dat2")
if err != nil {
    doSomething()
}
...

но, например, может быть, вам не нужно лечить эту ошибку (конкретный сценарий)…

var b bytes.Buffer
//Fprintf returns an error
fmt.Fprintf(
  &b,
  "%s=%s", 
  sanitizeCookieName(c.Name),
  sanitizeCookieValue(c.Value),
)

Если вы мне не верите, пример выше взят из исходного кода golang.

Некоторые советы:

  • Если ошибка может сломать ваше приложение, вы должны устранить эту ошибку.
  • Вы не знаете, может ли ошибка сломать ваш код, все равно лечите, так безопаснее.
  • Если ошибка не может сломать ваш код, иногда вы должны регистрировать ошибку, но не всегда.

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

Самое приятное в обсуждении было то, что мы обнаружили, что линтер Errcheck может отключать проверку ошибок для некоторых функций, вам просто нужно настроить. Теперь мне нравится errcheck… хахахаха

Удачного кодирования!