Илья
Илья
http://xahlee.info/comp/why_i_hate_exceptions.html
Andrei 🦉
Andrey
а, старые данные значит
Andrei 🦉
в swift говорят нету тоже
а еще там есть паттернг матчинг и еще очень много всякого вкусного, не зря его сейчас активно тянут в серверную разработку
Алексей
Vladimir
Я в своем коде каждую ошибку оборачиваю в другую ошибку с доп информацией, которую считаю нужной (метка места возникновения, может переменные, может текст), и ее уже возвращаю. Типа myerrors.New(“myfunc: err with path: “, path, err). Такая вот эмуляция стектрейса. В конечном счете жить можно.
Илья
Andrei 🦉
вообще то есть
хотя нет, это не экспешены в том смысле, в котором это реализованно в других языках, это специальные возвращаемые значения, которые по-умолчанию пробрасываются вверх по стеку
Andrei 🦉
короче реализация обработки ошибок близка к идеальной
Andrei 🦉
https://docs.swift.org/swift-book/LanguageGuide/ErrorHandling.html кому интересно
Vladimir
А вообще, к го2 подумывают что-то с ошибками сделать (сделать их типизированными вроде), но это не точно)
Илья
Aid
Илья
Антон
Антон
Алексей
Vladimir
Антон
Алексей
А зря
Andrey
Илья
Andrey
err != nil перестанет работать
Denis
Andrey
потому что интерфейс
Илья
??????
Andrey
??????
https://divan.github.io/posts/avoid_gotchas/#interfaces
Антон
Антон
Илья
гуд джоб, наверное
Denis
А что в default?
стандартное поведение
P.S - типизированые ошибки я рассмартриваю исключительно как контейнер с доп. информацией об ошибке, напр. последний запрос с БД который отвалился или что то еще
Denis
как Result в расте
Илья
Антон
как Result в расте
Без try! или ? обработка ошибок была бы столь же многословной, как и в Go
Илья
Denis
с одной стороны можно забить и юзать _ но это не по канону
Илья
иногда и правда зря есть возврат ошибки, бывает
Илья
обычно такое сделано для реализации стандартных интерфейсов, и, помоему, не всегда осмысленно
Andrey
Andrey
попробуйте сказать, какая ветка выполнится до Run
Andrey
именно поэтому вам нельзя возвращать типизированную ошибку, только интерфейс
Andrey
ну или можно, если ваш код видите только вы
Илья
можно и нужно возвращать типизированные ошибки
Andrey
так вы интерфейс возвращаете
Andrey
что вам даст типизированная ошибка, если внешний код видит только метод Error()?
Andrey
придётся кастовать
Илья
эм, а паттерн матчинг что делает по вашему?
Andrey
а при чём здесь это?
Andrey
я же про то, что если вы пишите библиотеку, например, то передача error ничего не даст
Илья
при том, что так работают с типизированными ошибками в go
Илья
Илья
https://dave.cheney.net/2016/04/27/dont-just-check-errors-handle-them-gracefully
Andrey
хорошая статья, читал когда-то
Andrey
вы её тоже читали, надеюсь?
BRZ
всем доброго времени суток
есть структура
type MyTable struct {
name string
Id int
}
есть запрос в БД
SELECT name, array_agg(id) from my_tables group by name;
есть описанная модель в go-pg
Вопрос: Могу ли я получить array_agg через модель go-pg или придется делать обычный запрос через Exec или Query
Andrey
Andrey
так мы с вами про типизированные ошибки спорим. нет разве?
Andrey
просто вы дали этот совет как панацею
Илья
Илья
вы думаете, каким именно образом, обеспечивается этот механизм?
Andrey
ну ок, значит я вас неправильно понял. Я подумал, что вы предлагаете тупо возвращать тип, который удовлетворяет интерфейсу error