Назад к вопросам
JuniorТеорияЧасто
Что выведет программа?
package main
import (
"errors"
"fmt"
)
func main() {
errNotFound := errors.New("not found")
err := fmt.Errorf("load user: %w", errNotFound)
fmt.Println(err == errNotFound, errors.Is(err, errNotFound))
}false true
- Ждать
trueот==:fmt.Errorfс%wвозвращает новую ошибку, внутри которой лежитerrNotFound, поэтому значения разные и их связывает только цепочка. - Считать, что
errors.Isсравнивает как==: он проходит по цепочке, которую строит%w, находитerrNotFoundвнутриerrи возвращаетtrue.
- Что вернёт
errors.Is, если в коде заменить%wна%v? - Почему ошибку-маркер обычно объявляют как
varна уровне пакета?