Go или Golang — компилируемый язык программирования от создателей таких шедевров как UTF–8, язык С, UNIX, Plan9 и других. Go поддерживает типобезопасность, имеет богатую и универсальную стандартную библиотеку и инновационные семантики одновременности: все то, что мы в индустрии называем concurrency и parallelism. На сегодня язык Golang является краеугольным камнем стабильности, прагматичности, де-факто представляет из себя стандарт в мире бэкенд–микросервисов и серверного кастрирования.
Почему только в одной стране мира лучшие в мире не имеющие аналогов программисты додумались использовать язык консольных утилит для написания бизнес-логики?
>>3677874 потому что бизнес-логика это обычные КРУДы со структурами, а не ебаные фабрики фабрик и декораторы которые заебешься чинить когда индусы-вайбкодеры выкатят очередной релиз срыгбута
>>3678497 Типо на бекенде ничего не расчитывается, да? Скидочка тебе на фронте считается, прям в консоль.логе? А то, что эта скидка у всех разная, ты не знаешь даже
>>3678550 круды это все что работает с бд, в том числе произвольные расчеты и запись результатов расчетов в БД, а бизнес-логика это слишком широкое понятие, и есть везде, в том числе на фронте - определение цвета кнопочек и тд
>>3678808 >>3678847 >>3679013 Шизы, у вас язык изначально дизайнился под нормальное завершение и sigterm. И по туллингу языка это видно. Об этом я и говорил Если точить язык под cli, то у него максимально шизовая философия для етоггт
Ну что, goспода, пора на мороз. Авито, Туту и Skyeng начинают массовые сокращения гошников.
>Очередные сокращения в Туту, Авито, Альфа, Skyeng
>В компании Туту сейчас сокращения, об этом даже пишут публично сотрудники что меня удивило. >Сокращения действительно большие. Источник: тут
>Из моих источников, сейчас так же сокращения в Авито в разных департаментах, связано это со снижением инвестиций в новые продукты и закрытие убыточных.
>Альфа так же старается сократить расходы и увольняет людей, пытаясь переложить временные расходы на аутстафф.
>Так же знаю что сокращение в SkyEng, об планах я знал еще полгода назад.
>По некоторым моим источникам, скоро ожидается еще пару волн сокращений в различных больших компаниях.
>>3683560 > потому что пустой массив и нул - разные вещи, долбоеб почему этот аноньчик сначала говорит очевидные вещи а вслед за этим пытается оскорбить? > в пгх есть херовина чтоб с этим правильно работать, кури доку не знаю никакого пгх, да и я давно уже нашел pq.Array, то что было нужно
>>3686946 Потому что контекст нужен для утечек памяти, а не для завершения работы. Единственный способ завершить работу здесь и сейчас - это убить процесс.
>>>3687106 >Потому что контекст нужен для утечек памяти, а не для завершения работы. Лучше бы молчал. Package context defines the Context type, which carries deadlines, cancellation signals, and other request-scoped values across API boundaries and between processes.
>>3687231 Додстер, нахуй ты мне линукс показываешь? Я тебе че написал? Если повезет с ОС - закроют твою ебучку. Го это не linux-only язык, ебанату Пайку было похуй приводить все ОС со всеми разными имплементациями IO к единому стандарту.
>>3688813 В чем смвсл вашего срача? Как будто ваши жсоноукладчики не в кубере крутятся и если это поделие как то ебанет ос в контейнере - придет ООМ и все почистит по красоте. Или вы embed на гошке писать собрались?
>>3693566 Я 20 лет в бекенде, на последней работе мы с коллегой плюсовиком вытащили из говна финтех стартап, который написали такие максимки тимлиды +33см. Го - хуйня. Максимум на что он годится - это консольные утилитки и только потому, что собирается в один бинарник. Язык ебаный, все через жопу, нет пути.
>>3693566 >на го все действительно так хорошо как пишет этот педрикс Этот чел инфоцыган. Разумеется у него все хорошо и прекрасно, так как надо курсы и менторство продавать. В реальности хуйня и работу не найти.
>>3694578 Да, ну и меня смущает, что везде она описывается как "де факто стандарт", "да бля буду скоро в стандартную библиотеку добавят", "база, каждый должен уметь пользоваться", при этом последняя версия самого пакета 0.20, то есть как будто хуитка в стадии беты
Сука, какая же ебанутая система модулей в го. Ну вот как можно вообще программу разделить на пакеты или просто на файлы? Почему нормально работает, только когда все в main.go? Просто блять как?????? Как мне сделать отдельный пакет с функциями чтобы я мог его импортировать, при этом не выкладывая ничего на github?
>>3695311 просто еще один пизданутый не осилил доку открыть и полез в гопоту, она такую хуйню про пакеты несет >>3695291 завязывай с разработкой, ты блядь сортер не вывезешь даже
>>3696104 >релиз чего блядь? там меньше 100 строк, что ты туда собрался насрать, поехавший? У тебя проблемы с головой? Не можешь два приложения прочесть? >го до сих пор 1.2*,и че? >Регулярно делать релизы не помешало бы, это дисциплинирует.
БЛЯТЬ БЛЯТЬ БЛЯТЬ ДА КАК В ЭТОМ GOВНИЩЕ ЕБАНОМ РАБОТАТЬ С ОШИБКАМИ ААААААА МОЯ ЖОПА Нет, ну серьезно, ребзя, это же просто какой-то пиздец. Вот как я привык в любом языкнейме с нормальными эксепшнами:
- валидирую формочку, формочка невалидна - плюнулся каким-нибудь условным new ClientException(418, "формочка невалидна, пашел нахуй отсюда"), на самом верху его поймал и вернул 418 с опциональной датой - база встала раком / ридер не ридит / врайтер не врайтит - плюнулся эксепшном, поймал наверху, пукнул в лог, вернул 500 - фейл авторизации - плюнулся AuthException, поймал, вернул 401
При этом есть стектрейсы из коробки, то есть при мало-мальском использовании мозга стектрейс уже должен предоставлять полный контекст ошибки без каких-либо лишних телодвижений.
А в goвне что? Стектрейса нет, изобретать его считается не тру говновей. Предлагается юзать тот факт, что ерроры приходится руками просирать наверх через все слои, и ручками же обмазывать их дополнительным контекстом, ну ок. В сети толковых примеров, как это делают достопочтенные goспода, хуй да маленько, зато тысячи мамкиных вебмастеров наперебой друг другу рассказывают, как охуенно удобно делать fmt.Errorf("baza puknula: %w", err), ебаный стыд блять, с такими еррорами ни о каком структурном логгировании говорить конечно не приходится, не говоря уже о том, что зачастую будет крайне хуевой идеей сирануть юзеру в ебало сырым еррор месседжем, а никакой дополнительный типа message/reason с этим Errorf не протащишь.
Но хорошо, допустим я накостылил какой-то свой ахуительный кастомный еррор с возможностью врапа с обмазыванием доп контекстом. Допустим, где-то в кишках бизнес логики у меня сидит функция, которая может вернуть еррор. Что там за еррор - одному богу известно с точки зрения вызывающего кода, может форма не провалидировалась, может база пукнула, может еще что. Но если это форма не провалидировалась, то такой еррор надо пропустить наверх без изменений; если база пукнула, то надо его обмазать контекстом/каким-то трейсом и пропустить наверх; если еще что-то, то обернуть в свой кастомный накостыленный еррор и пропустить наверх; то есть это надо писать какой-то громоздкий, кривой, уродливый switch. И писать его придется, как я понял, абсолютно в каждом ебаном месте, где вызываемый код может вернуть ошибку. И как жить с таким говном?
>>3696814 >кишках бизнес логики Ты понимаешь, что долбоёб тут ты? GOвно не предназначено для бизнес логики. Это язык консольных утилит и небольших IO приложений для обработки сетевых запросов. Всё. Юзать GOвно для бизнес логики может прийти в голову только ебанутому. То что аналоговнетные ру программисты додумались протащить его в бигтех - это тупой каргокульт в виду скудоумия. Анальники буквально как папуасы решили, что если они будут писать на языке из гугла, то станут гуглом.
>>3696814 Го не язык для веб макак с кпи в заднице, для макак дали джаваскрипт с подливой. Го - это си со сборкой мусора и писать надо вдумчиво и неспешно, как диды на мейнфреймах. В голанге ошибки сделаны хорошо. С ексепшенами ты ловишь нул референс где-то на самом верху и ебись, как хочешь. С err != nil ты на каждом шаге добавляешь осмысленную информацию через errorf и получаешь внятный трейс.
>>3696814 errors.As/Is ты не осилил? Если тебе надо преобразовать ошибку - протаскивай до хендлера и там мапь на что то юзерочитаемое. А вообще, в нормальном продекшене, отдаешь клиенту код ошибки а он уже на тексты справочников маппит.
>>3696814 >Допустим, где-то в кишках бизнес логики у меня сидит функция, которая может вернуть еррор. Что там за еррор - одному богу известно с точки зрения вызывающего кода Не понимаю, как это. Функция же делает одну вещь какую-то, соответственно, ошибка может быть связана только с этой одной вещью.
>>3696867 Прохладная история, братан. >>3696874 Сука у меня PANIC блять с тебя. Я же написал в посте про Errorf, что это поебота для школоподелок. Как ты будешь структурные логи делать со своим Errorf? Как ты будешь коды ошибок и request ID протаскивать? >>3696953 Так errors.As/Is это один хуй тот же свитч по типу еррора, и писать эту хуйню в каждом if err != nil - это полный пиздец. Вместо одного catch (MoyaEbuchayaOshibkaException e) {} надо переебываться с errors.As
>>3697016 >в каждом if err != nil Ты прикалываешься? На уровне хендлера ловишь ошибку - кидаешь в функцию враппер. Которая уже Через As/Is приводит удобоваримый для клиента вид. Пиздец блять....
>>3697227 И как много их? Я только пару книжек знаю, типа cloud native go и 100 mistakes, а какие еще полезные есть? Вот чтобы прям по бекенду было.
А так анон прав, в Европе вакансий на Го хуй да нихуяшеньки. Неиронично plata и nebius наверное два крупнейших голанк работодателя в гейропке. Ну и еще гугл, тесла и убер на го местами пишут, но туда еще попробуй попади.
>>3697063 Он наверное имел ввиду что глядя на функцию не видно что конкретно за ошибки она выбрасывает и чтобы это понять нужно идти и читать код, который ты вызываешь
>>3697363 Я считаю это мейнстримные практики, популяризированные легаси парашами, настоящий хайлоад инженер всегда готов к тому, что что-то пойдет не так, наиболее лаконичный способ выразить это в коде это оборачивать все запросы в 500 с данными или ошибкой в теле
>>3697336 Мне похуй. Поднятся по цепочке вызовов и посмотреть где варится ошибка - возможно. Если у него там цирк с конями и ошибки оборачивается без нормального %w - пусть хуй сосёт
>>3697339 И это все можно спокойно захендлить и зампапить в одной точке. А логгировать можешь как хочешь, хоть стринги реверсить
>>3697346 Кложу, пожалуйста, сюда вообще не затягивай. Невероятно грамотный язык в ебейшей экосистеме. Жаль работу хуй найдёшь к самураям не пойду, там релокацию просят
>>3697265 Да похуй чё там в европе, ты из треда в тред это пишешь. Если в мире существует бэк на го значит го пригоден для бэка. Точка. А мнение своё можешь в очко себе засунуть, никому оно не интересно.
>>3697727 Ну европа это один из немногих рынков труда помимо рф, где ты в теории можешь хоть какую-то работу найти. Поэтому мне не похуй. Я обратно из go в jvm ушел как раз по причине отсутствия вакух на го в ЕС.
А писать бек можно на чем угодно, хоть на эликсире, но как это коррелирует с реальным рынком труда?
Посоны, как вам такой план: учу Python и C (хочу научиться писать аналоги GoodbyeDPI), дальше вкатываюсь в Golang и пробую искать работу. Если не получится, то переключусь на Java. Помимо бэкенда интересна Android-разработка для реализации своих идей, поэтому Java и Kotlin имеет смысл изучить в любом случае.
>>3697751 Я скептически отношусь к таким заявлениям. IT зависит от экономики. Экономика когда-нибудь да выкарабкается. Тогда начнут нанимать как не в себя. Новые разработчики по любому будут нужны.
>>3697016 >Реквест айди Реквест айди шьётся в контекст через интерсептор, логгер конструируется через контекст. > Структурные логи Настройки логгера. >>3697336 В языках с эксепшнами ещё лучше - непонятно, что функция вообще может ошибку бросить, лол. И там и там публичный апи ошибок/эксепшенов смотреть надо.
>>3698034 ИИ в целом уже сейчас может писать код любой сложности для любого проекта. От круд поделки до движка распределенной СУБД. CockroachDB например сейчас целиком нейронками пишется.
В ближайшие годы никакого найма не будет - будут только сокращения. Сокращения будут идти нонстопом следующие 10-20 лет, пока нейронки не выведут на качественно новый уровень и тогда работники совсем станут не нужны.
>>3697741 >пробую искать работу Работы больше нет в этой индустрии, сынок. Иди учи что-нибудь другое, сантехнику, сварку, как плитку ложить, на врача вон пойди отучись - работа всегда будет. Айти умерло вне зависимости от стеков технологий. Можешь хоть семи пядей во лбу быть - работу уже никогда не найдешь. Даже если ты выпускник физтеха, мехмата, факультета компьютерных наук - один хер работу не найдешь. Кончилась наша индустрия.
>>3697752 >Экономика когда-нибудь да выкарабкается Это случится когда тебе будет 50+ лет, сынок. А я уже к тому времени походу в гробу буду лежать. Не дождемся мы этих времен.
Есть какой-то устоявшийся подход для возвращения из функции множества ошибок? Мой кейс: функция processSingleFile() получает содержимое файла, обрабатывает его. В случае ошибки возвращает ее. Эту функцию вызывает processFiles() которая в цикле вызывает первую. Сейчас чтобы не валить обработку пачки внутри processSingleFile() ошибки просто логгируются, я хочу логгировать всю хуйню уровнем выше, поэтому думаю завести в processFiles слайс ошибок и просто туда аппендить все что вернет processSingleFile. Со стороны кажется что это лютый говнокод, но в 90% случаях когда мне так казалось старшие коллеги говорили тип это ок, в го так принято. Погуглив нашел две либы для мультиэррора: от убер и хашикорп, но тащить либу чтобы собрать ошибки в одном месте кажется ебланством. В стандартной библиотеке есть errors.Join, но конкретно мне он не подходит тк ебаный zerolog игнорирует \n которые подставит в конец каждой ошибки джоин и просто высрет все одной строкой. Как быть?
>>3699337 В самом Го подход следующий: в сигнатуре метода возвращается error, на деле там некий MyErrorType который, или алиас для слайса MyOtherError, или структура со слайсом MyOtherError.
>>3699346 Нет в случае error рекомендуется именно error https://go.dev/doc/effective_go#errors >Library routines must often return some sort of error indication to the caller. As mentioned, Go's return values make it easy to return a detailed error description alongside the normal return value. It is good style to use the built-in interface type error for this purpose.
>>3699558 долбоеб, если у тебя проблемы с причинно-следственными связями, то поясню: документация - первый шажок к тому, чтобы стать нормальным инженером
>>3699586 я не отвечаю на вопросы долбоебов, которые ты сам себе придумал и считаешь важными, но они не имеют отношения к дискуссии, потому что логика, тупое ты уебище твой вопрос из анека про стаса михайлова ебущего детей