Почему в Golang io.EOF != errors.New("EOF")?

Только начала изучать go, дошла до библиотеки io. В документации написано: var EOF = errors.New("EOF") Но в коде программы сравнить ошибку с данным выражением не получается, данный фрагмент зацикливается:

for {
        n, err := r.Read(b)
        if err == errors.New("EOF") {
            break
        }
    }

Подскажите, пожалуйста, почему так происходит?


Ответы (2 шт):

Автор решения: KoVadim

Открываем документацию https://pkg.go.dev/errors#New и читаем

New returns an error that formats as the given text. Each call to New returns a distinct error value even if the text is identical.


Каждый вызов New для ошибки возвращает новое значение ошибки, даже если текст совпадает.

А так как оно возвращает новый объект, то они и не равны.

→ Ссылка
Автор решения: Ajjaah

Так должно работать

for {
    n, err := r.Read(b)
    if err == io.EOF {
        break
    }
}
→ Ссылка