Почему в 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
}
}