ошибки. Есть в Go 1.13 - PullRequest
       27

ошибки. Есть в Go 1.13

4 голосов
/ 25 октября 2019

Go 1.13 вводит новые функции для ошибок, чтобы упростить работу с ошибками. Перед Go 1.13 я проверил свой код на наличие ошибки следующим образом:

if err == nil {
    // ...
}

Но Go's errors.Is() помогает мне сделать это правильно:

Это разумный способЗащита вашего кода в будущем и предотвращение проблем, вызванных вами - или любыми пакетами, которые импортирует ваш код - оборачивая ошибки в будущем.

И это нормально для таких ситуаций:

if errors.Is(err, sql.ErrNoRows) {
   // ...
}

Означает ли это, что я должен изменить все свои err == nil заявления на:

if errors.Is(err, nil) {
    // ...
}

Ответы [ 2 ]

10 голосов
/ 25 октября 2019

Нет, нет. ошибки. Проверяет основные значения ошибок. Если какой-либо код возвращает sql.ErrNoRows и позже решает обернуть эту ошибку, ошибки. Ошибки (err, sql.ErrNoRows) продолжают работать как прежде, но err == sql.ErrNoRows будет иметь значение false.

НетЗначение ошибки означает, что ошибки нет, поэтому оборачивать нечего. Не существует кода, который вы можете написать, который изменяет то, что оценивает err! = Nil, и в то же время не возвращает ошибок. Есть только один способ вернуть ошибку: ноль.

0 голосов
/ 25 октября 2019

Нет. Не требуется. Мы используем errors.Is (), когда ошибка соответствует цели, и если она равна цели, она возвращает true. В вашем случае err - это ноль, который нельзя использовать с целью.

...