саша
Алексей
Алексей
прям отлично
саша
саша
Алексей
саша
почему?
Что делать, если возвращаемых значений несколько? А если ошибку надо преобразовать?
саша
И ещё какие-то корнер кейсы были, из кстати тут же обсуждали
Алексей
ну вообще да, есть корнер кейсы, но их не так уж и много
Алексей
но был где-то даже issue на гитхабе
Алексей
который как раз предлагал ввести оператор позволяющий преобразовать ошибку перед возвратом
Алексей
правда я его не найду сейчас скорее всего
саша
а ещё, помню в русте было интересное RFC с таким синтаксисом:
let SType::Int(i) = s else {
...
};
саша
типа если значение сматчилось, то всё ок, идём дальше, иначе исполняется блок кода после else
Алексей
саша
на го это бы выглядело как-то так
SType.Int(i) := s else {
...
}
саша
Алексей
Алексей
так и так приходится пробрасывать ошибки вверх по стеку
Алексей
по любому
Алексей
только в Go это делается либо руками
Алексей
либо через исключения для бедных (panic/recover)
саша
хотя в го конечно тоже не очень, по сути в го альтернатива unchecked ексепшнам, что такое себе
саша
а ещё они способствуют написанию кода игнорирующего ошибки совсем
Алексей
Алексей
саша
зло это когда из сигнатуры функции нельзя понять, может ли она выкинуть ексепшен/вернуть ошибку или нет
Алексей
Алексей
любая функция
саша
хотя по мне когда нельзя понять из сигнатуры чистая функция или нет - это уже зло
Алексей
и в го тоже кстати
Алексей
любая функция может вызвать panic
Алексей
Диёр
саша
любой код всегда может выкинуть ошибку
ну тут нужно понимать разницу между паникой из-за переполнения стека или из-за того, что ОС приказала упасть и обычной ошибкой, которая должна быть обработана
Диёр
Алексей
Алексей
Диёр
Даже банальное деление на 0
Алексей
И вообще я убеждён, что разделение ошибку на фатальную и не фатальную - уже не очень хорошая вещь
Диёр
саша
Не все же проверят
да, собственно, если бы все всегда проверяли всё когда нужно, то немалая часть плюсов статической строгой типизации бы отпала
Алексей
Не, точнее есть уж совсем фатальные ошибки, типа кончился стек, кончилась память, после которых скорее всего просто невозможно восстановиться
саша
aadz
да ничего не нужно. выдумки это все
aadz
Go - нормакльный язык!
aadz
в смысле, годный
Алексей
Вообще реально, обработка ошибок в Go - это самая больная вещь, которая на мой взгляд сильно мешает нормальному процессу кодинга на Go. То как это сделано сейчас - не в какие рамки не лезет.
Вот поэтому мой первый петпроджект на Go, который я сейчас пишу станет последним. И писать я на этом языке, плодящим копипасту я больше не буду.
саша
для системных администраторов - может быть, для программистов, которые какие-то непростые задачи, которые ещё никто нормально решил, решают, нет
aadz
Алексей
да
Алексей
причём "обработка" - это громко сказано
Алексей
потому что в 90% случаев это просто проброс выше по стеку
Алексей
потому что как правило ошибка не может быть полностью корректна обработана в том месте, где она возникла
Алексей
потому что если бы это было не так, то такой вещи как "исключение" вообще бы не существовало ни в одном языке
aadz
Алексей, обработака ошибок - это не громко сказано. Просто это твоя работа, а не громко сказано. Никто не мешает не обрабатывать - сам будешь виноват, как программист
Алексей
чего?
aadz
того! Тебя, тупиздень, заставляют проверять ошибки
Алексей
я вообще про то, что в большей части кода ошибка просто не должна обрабатываться, а должна быть тупо проброшена вверх по стеку
Заур
aadz
ДА
Алексей
Причём как правильно упомянул другой Александр, если бы меня заставляли бы для этого писать лишь один символ, то я бы и не бомбил сейчас здесь в чате
Алексей
но приходится постоянно КОПИПАСТИТЬ одинаковые if
Алексей
вот в чём проблема
Alexander
Коллеги
aadz
Коллеги. а зачем вам Go?
Alexander
Дискуссия уж очень жаркая стала. Сейчас админы набегут
Constantine️
я тут
Алексей
Коллеги. а зачем вам Go?
Мне вот он нужен для моего проекта, потому что у него есть замечательные и нужные мне горутины
Constantine️
кого-то надо банить?