Daniel
генерики не запихнули
$continue$
Всем привет. Кто использовал revel? Написано, что он фулл стэк, но вопрос, как в нем бэкенд использовать?
Прощу палками не кидать 😭
Алексей
https://github.com/albrow/fo
Алексей
Алексей
Алексей
Maksim (Ellrion)
а их применять можно очень не всегда
Алексей
https://blog.golang.org/defer-panic-and-recover
For a real-world example of panic and recover, see the json package from the Go standard library. It decodes JSON-encoded data with a set of recursive functions. When malformed JSON is encountered, the parser calls panic to unwind the stack to the top-level function call, which recovers from the panic and returns an appropriate error value
Исключений как бы нет в Golang, но они есть.
kås
ну если 20 однотипных проверок, можно их вынести в 1 общую. С едиными return values, etc
Алексей
kås
да, ты прав
Kirill
Constantine️
Алексей
не ну можно конечно оставить самый последний if в некоторых случаях, но это не совсем правильно на мой взгляд
Daniel
Алексей
if er != nil {
}
.
except BasicException:
pass
Алексей
во во
Илья
ну, линтеры на такое ругаются, обычно
Алексей
ну то есть фактически ситуация от пустого catch не отличается ничем
Kirill
Denis
на присвоение blank identifier _ по дефолту линтеры не ругаются, надо включать явно опцию errcheck
Sebor▂▅▇█▓▒░
Да, с ошибками беда в го
Я в этом случае просто смотрю код какого-нибудь крупного проекта)
Те же докер, кубер
Denis
хотя gas по дефолту ругается
.
А чем обработка в Go хуже чем в других яп? И где она хороша, если так говорить уже
Алексей
.
Спрашиваю же — чем?
Алексей
тем что эксепшены содержат стектрейс по которому можно отследить место возникновения ошибки
.
Ну а в других яп бесконечные try catch
Алексей
.
Приведите пример
Алексей
Приведите пример
//JS
try {
//огромное количество кода с кучей вызовов функций
} catch (e) {
console.log(e);
}
Kirill
Kirill
Алексей
Kirill
Равен хотя бы прикрутили бы
Алексей
в catch что угодно может быть
Cat
Cat
Kirill
Илья
exit(0)
Алексей
Cat
А ещё хуже можешь?
а в го не так разве?
value, err = get(); err != nil {
return nil, err
}
Cat
Cat
из головы синтаксис выдумал, не знаю как там на первоисточнике
Алексей
func mainFunc() (int, error) {
r1, err := func1()
if err != nil {
return 0, err
}
r2, err := func2(r1)
if err != nil {
return 0, err
}
r3, err := func3(r1, r2)
if err != nil {
return 0, err
}
return r1 + r2 + r3, nil
}
vs
function mainFunc() {
const r1 = func1();
const r2 = func2(r1);
const r3 = func3(r1, r2);
return r1 + r2 + r3;
}
Kirill
func mainFunc() (int, error) {
r1, err := func1()
if err != nil {
return 0, err
}
r2, err := func2(r1)
if err != nil {
return 0, err
}
r3, err := func3(r1, r2)
if err != nil {
return 0, err
}
return r1 + r2 + r3, nil
}
vs
function mainFunc() {
const r1 = func1();
const r2 = func2(r1);
const r3 = func3(r1, r2);
return r1 + r2 + r3;
}
Оно даже не соберётся
Алексей
проблема Go в том, что приходится обрабатывать ошибки даже тогда, когда по логике не нужно обрабатывать ошибки (точнее нужно их просто прокинуть вверх по стеку)
Алексей
Алексей
а блин
Kirill
почему?
Гора синтаксических ошибок %)
Kirill
Вы забываете, похоже, что можно не делать обертку, когда даже обработки ошибок вообще не будет
Roman
Но смысл ведь понятен.
Алексей
Cat
Daniel
Cat
я тогда совсем не понял
Алексей
я чего то не понимаю, про какую обёртку идёт речь?
Алексей
Блин, от обработки ошибок в Go у меня бомбит больше всего. Самый главный и критичный недостаток Go.
Oleh
Алексей
Рили?
Знаком такой принцип DRY? Вот он в Go в плане ошибок нарушается очень активно, без добавления каких-либо существенных преимуществ.
Алексей
Сделали бы хотя бы какое-нибудь ключевое слово чтоли, которое автоматически бы проверяло наличие ошибки и с возвратом из функции этой самой ошибки. Было бы вообще огонь.
Vadim
Алексей
ну это плохо
Алексей
Кто-нибудь знает, будет ли это исправляться в Go2?
Алексей
Или "и так сойдёт"?
kås
ну это плохо
Как по мне так велосипеды ради 100% dry ещё хуже