Size: a a a

2020 December 08

AS

Andrei 🦉 Sergeev in Go-go!
Алексей Долгов
насколько огромна разница между?
if exist и if errors.Is(err, ErrNotFound)?
разница в том, что потребителю не нужно знать конкретные типы ошибок, что обеспечивают адекватную абстракцию и независимость от типов ошибок конкретной имплементации
источник

ВС

Владимир Столяров... in Go-go!
Так с 1.13 (а в принципе и раньше) вполне нормально делать ошибки частью api
источник

АД

Алексей Долгов... in Go-go!
ну вот кстати невозможно сказать что имплементация вернет данный тип ошибки не заглянув в ее код. как с io.EOF получается. не каждый reader ее вернет. на совести разработчика лежит
источник

DP

Daniel Podolsky in Go-go!
Владимир Столяров
Так с 1.13 (а в принципе и раньше) вполне нормально делать ошибки частью api
технически - да. идеологически - это вопрос очень сложный. скорее всего - пакет с ошибками надо делать отдельный, иначе у нас там будет нарушение зон ответственности
источник

AS

Andrei 🦉 Sergeev in Go-go!
Владимир Столяров
Так с 1.13 (а в принципе и раньше) вполне нормально делать ошибки частью api
ну вот пример:
есть два пакета findDir1 и findDir2
в обоих пакетах реализована функция / метод с сигнатурой Find(string) (string, error)
я хотел бы у себя в коде описать этот интерфейс и иметь возможность прозрачно заменять одну библиотеку на другую, но вот проблема, каждая библиотека возвращает свою ошибку ErrNotFound
вопрос - что мне делать? ведь выбрав один тип ошибок я намертво привязываюсь к конкретной реализации
источник

ВС

Владимир Столяров... in Go-go!
Алексей Долгов
ну вот кстати невозможно сказать что имплементация вернет данный тип ошибки не заглянув в ее код. как с io.EOF получается. не каждый reader ее вернет. на совести разработчика лежит
Ну я надеюсь это явление временное и все так или иначе переедут на ошибки-контейнеры с Unwrap() на чем держится собственно Is и As
источник

ВС

Владимир Столяров... in Go-go!
А конкретно EOF уже давно часть контракта как индикатор корректного завершения чтения
источник

AS

Andrei 🦉 Sergeev in Go-go!
Владимир Столяров
А конкретно EOF уже давно часть контракта как индикатор корректного завершения чтения
прочитал как ErrNotFound)
источник

АД

Алексей Долгов... in Go-go!
Владимир Столяров
А конкретно EOF уже давно часть контракта как индикатор корректного завершения чтения
насколько я помню код не защищает этот контракт. на заборе тоже написано)
источник

ВС

Владимир Столяров... in Go-go!
Ну вот да, есть же там всякие ErrNoProgress, но я обычно при проектировании полагаюсь на это
источник

М

Марк Егоров... in Go-go!
Daniel Podolsky
но вот возвращать указатель в вашей ситуации - общепринятая практика.
Но если функция будет горутиной, это уже не будет работать, верно?
источник

DP

Daniel Podolsky in Go-go!
Марк Егоров
Но если функция будет горутиной, это уже не будет работать, верно?
что именно не будет работать?
источник

М

Марк Егоров... in Go-go!
Daniel Podolsky
что именно не будет работать?
В варианте без указателя всё локально и передается копия. В варианте с указателем передается копия адреса, который будет указывать уже на кучу, а не стек. То есть, значение будет существовать уже после завершение одной горутины.

То есть, она может быть изменена чем-нибудь
источник

DP

Daniel Podolsky in Go-go!
коллега, почему вас это беспокоит?
источник

М

Марк Егоров... in Go-go!
Блин, я нашел разбор истории с этим кейсом. И тут всё непросто получается.
источник

М

Марк Егоров... in Go-go!
https://www.ardanlabs.com/blog/2017/05/language-mechanics-on-escape-analysis.html


Тут целая статья посвящена этому.
источник

DP

Daniel Podolsky in Go-go!
ну - там хватит материала на несколько статей. но что вас беспокоит?
источник

М

Марк Егоров... in Go-go!
Что я считаю не те данные
источник

Z

Zver in Go-go!
Какой-то херней страдаете, один элемент - указатель. Несколько - список. И все понятно нашлось или не нашлось.
источник

DP

Daniel Podolsky in Go-go!
нет, вот этого никогда с вами не случится
источник