Go тред №27 /go/
Аноним17/02/24 Суб 20:10:54№30526641
Go или Golang — компилируемый язык программирования от создателей таких шедевров, как UTF–8, язык С, UNIX, Plan9 и других. Go поддерживает типобезопасность, имеет богатую и универсальную стандартную библиотеку и инновационные семантики одновременности: все то, что мы в индустрии называем concurrency и parallelism. На сегодня язык Go является маяком стабильности, прагматичности, де-факто представляет из себя стандарт в мире бэкенд–микросервисов и серверного оркестрирования.
>>3052664 (OP) >или хотя бы просто htmx? Пробовал, короче для туду листа охуенная вещь, как только нужно как-то обрабатывать ответы, например те же ошибки более детально, то тут и начинается жопа. Для какой-нибудь внутренней админки подойдет, как раз там примитивная верстка и жиквери от которого можно отказаться. Но если для продакшна с пользователями, то проще на реакте накидать фронт и не ебаться с этим говном.
есть смысл вкатиться в Go после неудачного вката во front(react)? заебался искать работу на реакте - не получается никак. го вроде несложный и синтаксис приятный. я думаю мне не сложно будет освоить
>>3054804 на гоу требуется больше скилла чем на жээсе, где в основном кнопочки накатывать с фигмы и обработчики вешать. Иди качайся и глупых вопросов не задавай. Вообще сам факт постановки такого вопроса как бы намекает что ты не тем занимаешься хуйнёй страдаешь
>>3054834 извини, возможно вопрос был несколько неопределенный. Меня интересует только будет ли вкат свободнее и проще в плане что не будет 900 откликов на вакансию. Возможно мне нужно отредактировать резюме. Только я не ебу как хакнуть эту систему, чтобы выбрали именно меня, а не рэндомного ванька. Знаю только что херки смотрят больше в топе,а чтобы в топ попасть нужно ставить опыт и чтобы ключевые навыки совпадали 100%. У меня год опыта стоит
>>3055017 Никак не хакнуть. Научись что-то представлять из себя. И откликайся. Чем больше откликов, чем больше знаний - тем выше шанс получить офер. Даже я синьор помидор десять лет стажа порой сильно лажаю на интервью, потому что это отдельный скилл, который надо качать. То есть чаще интервьюироваться.
Пытаюсь понять, что такое контекст, для чего он нужен и где создается. Пока что не получается. Складывается ощущение, что это просто кей-валью, который прокидывается откуда-то сверху, но это явно не так.
>>3055290 Это буквально кей-вэлью коллекция. Используется для передачи глобальных переменных. Если мы хотим покрыть код тестами, от глобальных переменных придется отказаться - их хуй замокаешь. Глобальные переменные можно передать двумя способами. Допустим, нам надо имя текущего пользователя. Можно передать через DI, как в сишарпе, мы просто добавляем какой-нибудь интерфейс IUserContext со свойством UserName, присваиваем значение на входе в наш контроллер и дальше инжектим этот интерфейс, где надо. Просто и элегантно, это не говей. Можно взять словарь, добавить юзернейм туда и тупо прокидывать этот словарь через все методы. Таков путь.
>>3055476 >Используется для передачи глобальных переменных. нихуя. скоуп глобальных переменных другой. переменные в контексте реквест-скоупед по задумке. могут быть глобальными для программы, если у тебя есть корневой контекст, но это намного реже используется. >Если мы хотим покрыть код тестами, от глобальных переменных придется отказаться - их хуй замокаешь глобальные переменные как раз можно использовать для моков - например, вместо time.Now() объявить глобальную переменную-функцию, которая в тестах будет вместо текущего времени возвращать фиксированное значение. или за счет того, что это локальная переменная, а не константа, переопределить в тестах какие-нибудь таймауты до приемлемого значения, чтобы ускорить прохождение. то, что это замена передачи словаря - да.
>>3055290 Это linkedlist из keyvalue, на который накрутили возможность трекать лайфтайм и отменять контекст. Сейчас контексты используются преимущественно для отмены вывполнения дринной операции, результат которой уже не нужен и контект которой отменили.
>>3055476 >>3057116 Спасибо. Стало понятнее. Очередной инкремент на курсах таки сдал. Надо будет попрактиковаться еще немного, потому что хоть и пробросил, но не понимаю, как это все-таки на практике работает. Когда инициализирую БД, то тут понятно. Сам задал контекст, не успел по таймауту, вылетел. Но вот есть хендлер, я из запроса беру контекст и кидаю по стеку вниз. А откуда там этот контекст берется? Генерируется сервером?
>>3058488 > А откуда там этот контекст берется? Генерируется сервером? да. ну как пример ты на сервере можешь настроить ReadTimeout/ReadHeaderTimeout, чтобы твой сервис не ддосили нищуки с медленным интернетом. таймаут кончается, и контекст отменяется. аналогично клиенты могут тебе передать какой-нибудь x-deadline хедер, чтобы мидлвара поставила кастомный таймаут на запрос. можно BaseContext при создании сервера указать, чтобы контексты в реквестах от него шли.
>>3062272 Успешно задрочил вопросы собесов и накрутил 2 года опыта. Приняли на работу в хорошую компанию на 240к. Через 3 недели мне устроили экзамен по голангу и вебу, который я завалил будучи волчарой. Сейчас охочусь на следующего кабана.
>>3062272 Начал изучать го, потом дропнул его, потому что уже в каждой перделке есть свой асинк/авейт и незачем писать в процедурном стиле 70х годов, теребя каждую ошибку.
>>3055290 Не соглашусь, что контекст для прокидывания глобальных переменных. Это про прокидывание переменных, которые должны пропагироваться по всей цепочке взаимодействия. Самый простой пример это реализация дистрибьютед трейсинга: прилетает http-запрос с request-id, хендлер запроса идет во внешний сервис за обогащением и затем сохраняет что-то в БД. Чтобы связать все эти запросы в логах/трейсах тебе нужно передавать далее по цепочке этот request-id, который уместно хранить в контексте - тут да, контекст можно рассматривать как key-value. Второй кейс с контекстом - когда тебе нужно прервать цепочку вызовов. Это делается через отмену контекста - отменяешь родительский контекст и все остальные по цепоче тоже отменяются (при условии, что код пикладной код слушает отмену). Таким образом удается избегать ситуаций, когда клиент уже отвалился по таймауту, хендлер держит коннекты, ожидая ответа от другого сервиса/БД
>>3062272 С нуля стажерами охотно берут во всякие мейл ру, яндекс и озон. Ну если ты студент конечно.
А так у меня история такова, что я пошел будучи нулевым на проект, где мне обещали микросервисы на котлине и гоуленге. В итоге это все наебаловом оказалось, проект - старая дрисня в виде копролита на питухоне 3.5, и только лишь один мертвый сервис на го, разработчик которого уволился в другое место, а сервис закопали, так как он недоделанный оказался. Сейчас по вечерам пытаюсь учить го, где-то осенью буду пытаться сваливать с парашного проекта в другое место, где будут исключительно го и микросервисы, а не древние копролиты.
>>3063301 >С нуля стажерами охотно берут во всякие мейл ру, яндекс и озон. Ну если ты студент конечно. Там же конкуренция уровня 500 человек на место и берут только йоба-олимпиадников. Заебись ты копиума выдал...
>>3063617 У озона в специальной олимпиаде для мидлов в нынешнем потоке было зарегистрировано 512 человек. Для отсева там проводится контест за 5 часов нужно решить 9 задач, человек 80 выполнило все задания из них оставляют где-то не больше 30, остальным отправили письма счастья с пожеланием хорошего дня. В приоритете люди из городов в которых есть офисы озона и кто будет работать в стойле. Для джунов боюсь представить что там происходит. Задачка про Ваню забавная
>>3063301 >древние копролиты Почему-то на микропенисы дрочат ньюфаги, которые с ними никогда не работали. Маркетологи промыли пориджей, мое почтение. Ты еще будешь с тоской вспоминать монолит, который можно просто открыть на компе, просто расставить брекпоинты и посмотреть, как все работает.
>>3063774 > монолит, который можно просто открыть на компе, просто расставить брекпоинты и посмотреть, как все работает это после скачивания 20ГБ кода и ебли с зависимостями? я 5 микросервисов подниму и расставлю брейкпоинты за время когда это всё качается
>>3063825 Да это похоже один шиз пишет, который в растотреде всех заебал, он похоже студент, нихуя не работавший и постоянно про каких-то маркетологов пиздел.
>>3063936 >Правильно ли я понимаю, что возможность удалять свои посты так и не завезли? После регистрации, можно удалять и редактировать. Регистрация доступна через госуслуги.
>>3055061 Я другой анон и вопрос немного оффтопный и вопрос не конкретно к тебе, но...
Как преподнести интервьюеру что сначала я 2-3 года нормально работал, а когда война началась я 2 года ебланил? В прошлый раз на собесе сказал правду и почувствовал какое-то напряжение из-за этого ответа, вроде бы.
Еще мне как-то один знакомый сказал, что в яндексе есть БД в которую складывают результаты собесов чуть ли не вместе со стенограммой и не с досье на человека. Звучит сомнительно, но с тех пор я еще сильнее боюсь собеседоваться. Какая-то параноидальная мысль стоит в голове, что все они как-то отслеживают нас. И что если ходить на все собесы на которые меня приглашают, то рано или поздно не останется работодателей, которые не знают, что я долбаеб. Рано или поздно работодатели кончатся! А вдруг крупные компании типа яндекса и, хз, VK, например, уже давно обмениваются инфой? Чтобы не тратить время на мусорные собесы? И Яндекс даже не прислал письмо мне с отказом именно по этой причине? Потому что когда-то я плохо проходил собес у VK? Знаю, что этот абзац, скорее, полностью бред, но иногда меня накрывает такая шиза, что хочется к какому-то специализированному на hr психологу сходить. Но потом отпускает и я не иду.
>>3063892 В сбере и для сенек голодные игры уже сделали. Человек 80 всегда участвуют. Только там отсев по трудовой, чтобы джентльмены удачи не доёбывали.
>>3063825 >это после скачивания 20ГБ кода и ебли с зависимостями? я 5 микросервисов подниму и расставлю брейкпоинты за время когда это всё качается Зависимости надо скачать один раз, а ебаться с поиском проебанного реквеста каждый день. Или выяснять какого хуя простой запрос отрабатывать за 5 минут, какой из 20 микропенисов тормозит.
>>3064176 >, какой из 20 микропенисов тормозит Это уебанская архитектура, у тебя не микросервисы, а распределенный монолит. В большинстве случаев сервис должен жить сам по себе и нигде не запрашивать данные, а другим сервисам отправлять запросы в очередь. Ты еще скажи что у вас эти 20 сервисов по rest api общаются
>>3064302 >Это уебанская архитектура, у тебя не микросервисы, а распределенный монолит. Сразу видно джуна. Сеньки то знают, что рано или поздно любая микросервисная система превращается в распределенный монолит.
>В большинстве случаев сервис должен жить сам по себе и нигде не запрашивать данные, а другим сервисам отправлять запросы в очередь. Один совет ахуительнее другого. А клиент тоже должен очередь слушать, на предмет когда его запрос запроцессится?
>>3064127 я являюсь рекрутером в IT Большинство компаний использую CRM, куда сохраняются твои резюме. То есть если я тебя нашел 2 года назад и сохрнил твой профиль, где у тебя одни компании, а сегодня нашел снова твой hh и снова добавил тебя в crm, а у тебя там совсем другие работодатели, нежели которые были 2 года назад, то она соединит твое резюме и я пойму что где то ты врешь)
я своё резюме раз 5 переписывал, потому что работодатели менял имена компаний, потому что добавлял или уточнял детали и сроки, удалял старый опыт когда у тебя больше 5 айтемов в резюме его никто не будет читать до конца хуёвый ты эйчар, хуй будешь?
>>3064302 Какой забавный джуник. >другим сервисам отправлять запросы в очередь Классика. Ты даже не представляешь, как ты ОХУЕЕШЬ через пару лет отлаживать такую архитектуру.
>А клиент тоже должен очередь слушать, на предмет когда его запрос запроцессится? Во первых не нужно разбивать совсем на микрописьки, а исходить как раз таки из бизнеслогики. Если клиенту нужно мгновенно получать какие-то данные, но их нет в этом сервисе, значит их нужно дублировать в этом сервисе в рамках разумного конечно же, при этом в случаи коллизий приоритетным должен быть тот сервис которому эти данные принадлежат. Все запросы на мутацию/добавление данных отправлять в очередь, а на клиент отправлять статус "делается".
Помню мы ебались с микрописечной архитектурой, в итоге объеденили 3 сервиса в один над которыми я работал один лол, они были очень сильно связаны между собой. Добавили 2 таблицы данные для которых брали из другого, а все телодвижения с другими сервисами убрали в очередь. Пришлось ПМке и дизайнеру объяснять что нужно добавить на фронт промежуточный статус для некоторых действий, плюс фронту немного помог с оптимизацией, он много лишних запросов делал. И о чудо вместо 10-15 секунд у меня все выплевывалось на фронт за милисекунды. В ТП вообще обрадовались, до этого постоянно заебывали что всё тормозит. Сделали практически тоже что этот мужик рассказывал https://www.youtube.com/watch?v=FF-GZ7iipwc
>>3064426 Веселая у вас галера. Джун на фронте не понимает, как работает сеть, про апи гейтвей тоже ничего не слышал. Джун на бэке пытается изобрести ивент сорсинг, но делает это через жопу. Микросервисы пишутся одним человеком, каргокульт такой каргокульт.
>>3064426 >Во первых не нужно разбивать совсем на микрописьки, а исходить как раз таки из бизнеслогики. Если клиенту нужно мгновенно получать какие-то данные, но их нет в этом сервисе, значит их нужно дублировать в этом сервисе в рамках разумного конечно же, при этом в случаи коллизий приоритетным должен быть тот сервис которому эти данные принадлежат. И через пару итераций получим монолит, так стоило-ли сопротивляться?
>Все запросы на мутацию/добавление данных отправлять в очередь, а на клиент отправлять статус "делается". Пользователь изменил настройки, нажал кнопку сохранить, а ты ему такой: "сохраняем, пожалуйста подождите". Ю - юзабилити!
>>3064755 Двачаю. Пихать всё в кролика это шиза ебаная. Есть функционал, где надо/можно дать ответ сразу, там RPC. Есть функционал, где невозможен/не нужен немедленный ответ, там брокеры.
>>3064408 Может быть огромное количество причин, почему ты не узнал, что это спалили, начиная от того, что просто ранее тебя это компания не видела и не добавляла в crm и заканчивая, что рекрутеру просто на это всё равно. Но ты - обезьяна этого не понимаешь, тебе бы лишь бы хуйню написать. Лучше бы так собесы проходил, как на двачике пытался самоутвердиться. А то процентов 80% разрабов при первом общении отлетает по софтам:)
>>3064755 >И через пару итераций получим монолит, так стоило-ли сопротивляться? Это из крайности в краность, любо микрописьки, либо монолит-сталагмит из говна на жабе. Надо искать золотую середину, самое главное сделать так чтобы было меньше связей между сервисами.
>Пользователь изменил настройки, нажал кнопку сохранить, а ты ему такой: "сохраняем, пожалуйста подождите". Ю - юзабилити! Не совсем так, допустим одно из действий: Надо было подключать услугу на устройствах, у меня в БД все что нужно было добавилось и дальше надо в сторонний сервис чтобы эта хуйня включалась на устройствах. Раньше приходилось ждать пока они все подключатся иногда падало по таймауту, пользователь сидел тупил и иногда у него не получалось, он шёл в ТП, ТП к ПМ, ПМ ко мне. Я хуй его знает чего делать у меня в логах по таймауту все упало, дальше по цепочке оно там все сделалось как надо, в ЛК у пользователя нет нихуя. Короче сделали что все взаимодействие со сторонними сервисами было в очереди, а на фронте появлялось сообщение что ХХХ в процессе подключения, дизайнер еще проработала разные сценарии, там по красоте было понятно, плюс в основном этим сервисом пользовались инженеры. То есть пользователь нажал и увидел что что-то делается, а не ждет ошибку и в течении пару минут все подключается. Как только они там запердолились мне приходил ответ и я у себя в БД менял статус на "подключено", соответственно когда фронт делал потом запрос, было видно что все подключено. Юзабилити наоборот стало лучше, обращения по поводу этой хуйни в ТП закончились. И еще пару фич на такую логику перепилили. Те же формирования отчетов для отдела продаж сделали также, они нажимают на кнопку, оно пишет что отчет делается, как сделается у них появлялась ссылка на скачивание эксельки, до этого постоянно ебались и по много раз тыкались.
>>3064796 >Двачаю. Пихать всё в кролика это шиза ебаная. Есть функционал, где надо/можно дать ответ сразу, там RPC. Есть функционал, где невозможен/не нужен немедленный ответ, там брокеры. Так и сделано было, мы не прям всё убрали в кролика, кое что всё же оставили, но большинство взаимодействий таки убрали
>>3064871 Ну я как пример показать, когда смотрел видос я удивился что мы примерно к тому же пришли. У них там да, прямо все вокруг брокера и на событиях
>>3064294 >>3064387 Жесть. Нафига вы подливаете масло в огонь, пацаны? Я за пол года поиска работы пересилел себя только один рай пойти на собес. Теперь, наверное, вообще не пойду, пиздос.
А всем компаниям, которые хранят у себя мои персональные данные без моего разрешения, я желаю банкротсва и пойти нахуй! Хотя я, нав, уже галочку в hh где-то поставил, хз. Возможно, можно как-то галочку отозвать, бтв.
>>3064387 Блядь, да даже досье на человека по его данным из соцсетей нельзя собирать! Хотя там челидодики сами все напоказ выставялют и даже разрешают поисковикав индексировать их странички
>>3059357 Чел, типобезопасность это Хинди-Мильнер, это ADT ,это exhausive паттерн-матчинг, а не эта погремушка, когда передаёшь всё что угодно в interface{} и компилятору вообще похуй чего ты там "определяешь" из него.
>>3064857 То что ты описал это и есть монолит, когда связанные функции группируют в одно приложение. Совсем не обязательно, чтобы весь функционал был в одном единственном приложении, их может быть несколько. Основная идея это как раз слабая связанность между собой, если другие сервисы недоступны, то базовый функционал все равно будет работать.
>>3064986 Ебнутый что-ли, ты не можешь никак провзаимодействовать с пустым интерфейсом (передача в другой метод или принт не считаются по очевидным причинам), тебе необходимо явно установить тип перед тем как взаимодействовать с тем что скрывается под пустым интерфейсом. Чем не type safety?
>>3065014 >Озон Финтех >ехал литкод через литкод >поверни эту строку, поверни ее снова >спроектируй мне фейсбук за 5 минут >в итоге взяли дебила, который не знает про idle in transaction и роняет прод в аккурат перед праздниками
>>3064968 Волков бояться - в лес не ходить)))кринж,но как есть Для рекрутера и бизнеса главное закрыть потребность и найти крутого чувака) Хоть 10 лет опыта накрути, но если ты нормальный по софтам и горишь своей специализацией, то ты пройдешь в любом случае)
>>3063617 >Заебись ты копиума выдал Ну есть и другие компании, какая-нибудь лига цифровой экономики го джунов тоже набирала в свое время. Я там работал джава разрабом полгода - коллектив все как один вкатуны по курсам гикбрейнс были, с вышкой только лид (он радиотехнику какую-то в нулевых окончил) и еще один парень, откуда-то из саранска что-ли. Остальные именно что заводчане и грузчики бывшие. И ничего, кое-как их набрали ведь.
>>3063617 >Там же конкуренция уровня 500 человек на место и берут только йоба-олимпиадников Олимпиадником быть не нужно даже для яндекса. Литкод гораздо проще чем олимпиады. Конкуренция есть конечно, но если литкод затащишь, то в яндекс возьмут практически в любую команду, где не нужна математика или мл.
>>3063774 >Ты еще будешь с тоской вспоминать монолит, который можно просто открыть на компе, просто расставить брекпоинты и посмотреть, как все работает У нашего копролита миллиард зависимостей от сторонних сервисов. Ты его не сможешь запустить в дебаггере, расставив брейкпоинты. Только если тесты писать руками и поднимать тестовую базу в контейнере. И то, далеко не все случаи ты так сможешь раздебажить. Дебажить на поднятом тестинге у нас нельзя, к сожалению. Слышал про то, как иногда можно прям дебаггером подключиться к тестовому серверу и дебажить так, но у нас такое запрещено.
И поверь, дебажить мелкие говнохуитки на гоуленге в десятки раз проще, чем десятилетний код на питоне с адовыми слоями декораторов и метаклассов.
>>3064127 >в яндексе есть БД в которую складывают результаты собесов чуть ли не вместе со стенограммой и не с досье на человека В любой крупной конторе (да и в любой мелкой тоже) такое есть уже много лет. В яндексе после каждого собеса о тебе интервьюер пишет свой отзыв, который навечно сохраняется в базе у них. Ну и если ты спустя 10 лет снова в яндекс вернешься, то какой-нибудь собеседующий или потенциальный лид может покекать с того, что о тебе писали десять лет назад.
>>3065474 > и роняет прод в аккурат перед праздниками Перед праздниками везде фриз выкаток кода, и уж тем более в e-commerce, не пизди. Максимум - шаблоны разметки, и то под ок бизнеса.
Как говноланг мог так взлететь? Я этого просто не пынямаю. Как язык, у которого нет эксепшенов и синтаксис выглядит как умственно отсталый брат си, сумел стать таким хайпанутым? В чем его секрет? Пиар гугла? То что быстрый? Этот вопрос сводит меня с ума уже месяц
>>3063836 Ты по всем тредам ходишь и ищешь какого-то растера в тредах, понимаешь, что шизом выглядишь сейчас тут ты. Да, люди сидят не в одном треде, нафиг ты это пишешь? Чудо.
>>3066297 >>3066268 >Как говноланг мог так взлететь Синтаксис у него может как у отсталого брата си, но при этом у него есть 1) GC 2) Горутины 3) Компилируемость в бинарь 4) Отличный тулинг 5) Простой синтаксис, который не позволяет писать хитровыебанный загадочный код
Вот и все. Ну и поддержка гугла, разумеется. После джавы и питухона с их магией на рефлексии/метаклассах/декораторах говноланг это как глоток чистого воздуха.
>>3066268 Как спец могу сказать -Конкурентность, точнее зеленые функции. -Один бинарь с рантаймом без VM, отсутствие траха с зависимостями -Тогда еще могла удивить кросскомпиляция.
На этом все, язык не пригоден для промышленного кодинга, в крупных разработка уже нужны стектрейсы и норм логи, нужно IoC, становятся нужны даже геттеры и сеттеры и хоть какой-то сахар, так как бойлерплейтить больно (но можно, хомяки упертые).
>>3066474 Ну, логи от языка не завсият. Хорошие логи должен сам разработчик уметь правильно писать. IoC тоже не языко-специфичная тема.
Без стектрейсов может быть тяжеловато конечно, но мы просто ошибки наверх через fmt.Errorf("info: %+v", err) выбрасываем, таким образом добавляя нужную инфу к ошибке слой за слоем. Сорт оф стектрейс.
>>3066470 >4) Отличный тулинг отличный от нормальных языков.
>>3066476 >мы просто ошибки наверх через fmt.Errorf("info: %+v", err) выбрасываем, таким образом добавляя нужную инфу к ошибке слой за слоем. Сорт оф стектрейс. Стектрейсы для бедных. Ладно такая херня в Расте или Си еще понятна, у них цел нулевой оверхед, так что извольте поебстись. При том что стектрейсы то есть и их даже можно прицепить к ошибке, просто так не принято.
>>3066476 >Ну, логи от языка не завсият. Как пример жаба, где уровень логгов можешь настроить по пакетам. Где-то заглушить, где-то увеличить уровень. Хз написали ли на го нечто такое, но когда я с ним трахался ничего такого не было (было кругом сырое васянство).
>IoC тоже не языко-специфичная тема Мне гоферы говорили ненужно, как и отладка, они на полном серьезе меня убеждали дебажить принтами.
>но мы просто ошибки наверх через fmt.Errorf("info: %+v", err) выбрасываем, Человек-эксепшен. В те года, я практически верил, что они сэкономили на компиляторе, чтобы оставить плацдарм для оптимизации. Но теперь я вижу, что они просто положили болт.
>>3066530 >Их всегда тяжело читать, а из полезной нагрузки всего лишь несколько строчек. Потому что ты ничего крупнее круда не нюхал. Когда функция foo крашится по четвергам, ты в логах видишь что упала foo, а то что она вызывается 1000 раз из 100 разных мест и по четвергам, говорит тебе о том, что ты будешь дебажить месяц. это называется плавающая ошибка или heisenbug
>>3066532 Ошибка из функции foo пройдет несколько этапов, в которых наслоятся друг на друга эррор месседжи, и ты будешь знать как минимум место где она вызвана, как максимум обстоятельства. Ну это в случае если все хорошо с кодстайлом на проекте, на моей первой го работе у челов на каждую эррору стоял лог в котором (к счастью автоматически) указывалась строка где лог был вызван, а там уже понятно куда копать. На бумаге хорошо, да вот только и так немалые методы вырастали на процентов 30 и переставали помещаться на один экран, и прочие проблемы с читабельностью
>>3066557 Проброс ошибок, это другая проблема. В общем, опять вспоминая джаву, в ней есть checked исключения и время показало, что это не очень практично указывать исключения в сигнатуре метода, в котлине и шарпах от этого уже отказались.
Это прям реальный пример эволюции, мы пишем достаточно крупный софт, чтобы заниматься еще какой-то херней. Анон выше писал, если для си и раста это приемлемо, ты пытаешься в минимум абстракции, чтобы выжить максимум, то для прикладных, а точнее языков "приложений", это вообще моветон, тупо переложили работу компилятора на плече хомяков.
Кстати, в расте я видел что обобщают ошибки до Box<dyn...>, а это, насколько я понимаю, аллокация памяти. Так что вот тебе и "зеро кост абстракшен".
>>3066532 Ну опять же - если паника необработанная, то будет тебе стектрейс. Если обычная ошибка, обернутая сообщением, то тоже можно будет понять откуда она прилетела.
Возможно это не очень удобно, но жить с этим не так уж сложно.
>>3066531 >Мне гоферы говорили ненужно, как и отладка, они на полном серьезе меня убеждали дебажить принтами DI в Го это именно что в main функции создавать все нужные зависимости в виде логгеров, пул подключений к БД, подгрузку конфига, его валидацию - и все это запихивать через сорт оф конструктор в какую-нибудь структуру Application, у которой будет метод Run, где будут создаваться и прокидываться друг в друга репозитории, сервисы, контроллеры. Прям как в спринге, только вместо собачек с Component и Autowired у тебя будет ручное создание объектов и ручное прокидывание их в функции-конструкторы.
>>3066641 >ручное прокидывание их в функции-конструкторы Охуеть, вернули мой 2007. В сишарпе DI фреймворки давно умеют сами резолвить зависимости через рефлексию. Ты просто пишешь в конструкторе у MyController аргумент ISomeInterface, дальше оно само все находит и подставляет.
>>3066641 >Если обычная ошибка, обернутая сообщением, то тоже можно будет понять откуда она прилетела. Каким местом? Читай внимательно, что написали выше. Да и понятно, что для мелко-круда можно хоть на баше писать.
>>3066767 — Дженерики есть? — Дженериков нет. — Есть дженерики в планах? — Дженерики не планируем. — Дженерики можно посмотреть, какие есть? — Нет, Дженериков в голанге нет. — Я бы хотел написать дженерик, когда они вообще? — Извините, у нас нет в планах дженериков. — Удобные инструменты есть? Мне дженерики нужны. — Мы их никогда не планировали и не планируем. И ведь этот гугловец, зараза, знает меня идеально в лицо, знает, что я спрошу и знает, что он мне ответит. Но ещё ни разу ни один из нас ни жестом, ни словом не показал, что каждый из нас знает сценарий. Бывает, зараза курит у входа, когда я захожу в офис Гугла, тогда я подсматриваю за ним сквозь стеклянные двери, он равнодушно докуривает, выбрасывает бычок и возвращается за ресепшен: — Что вы хотели? — Мне нужны дженерики. — У нас нет. — Жаль.
>>3066530 >Лучше чем в jvm тащем-то. Не говоря уже про всратый питон. Не пизди, в JVM мире один из самых лучших тулингов. Тут тебе и все возможные билд системы, и центральный репозиторий зависимостей которую спиздили другие языки. И линтеры и коданалайщеры всех цветов и расцветок. Куча всяких прод метрики, логов, трейсеров.
>Чего только рейсдетектор стоит. Вначале не добавили в язык конкарент коллекции, потом закостылили рейсдетектором.
>Стектрейсы в голанге так-то есть в голанге, да. Но зачем они нужны? Их всегда тяжело читать, а из полезной нагрузки всего лишь несколько строчек. Внезапно! Ты и в говноланге делаешь стектрейс оборачивая ерр в новый ерр. Потому что колстэк важен почти всегда. Только в нормальном языке стектрейс стандартный и его можно легко парсисть: например Иде может перейти к коду. А в говноланге ты ручками ищешь по тексту сообщения об ошибке.
У тебя концепция кол стека есть не то что на уровне ОС, а даже на уровне процессора. Но нет, пришёл Роб Пайк и сказал что стектрейс не для гойев. себе, для panic, он стектрейс оставил
>>3066861 > Не пизди, в JVM мире один из самых лучших тулингов Лол
> Но нет, пришёл Роб Пайк и сказал что стектрейс не для гойев. себе, для panic, он стектрейс оставил Ты можешь забрать стектрейс и паники и пробросить выше, но нахуя?
>>3066663 Что находит и что подставляет? Все наелись этой хуйни и пилят теперь static di, потому что магия магией, а код вот он и по крайней мере не пиздит.
>>3066870 >пук Нормальных аргументов явно не стоило ждать.
>Ты можешь забрать стектрейс и паники и пробросить выше, но нахуя? Во первых ты даже стдлиб не знаешь, стектрейс можно и без паники получить. Во вторых, чтобы не ебаться с >мы просто ошибки наверх через fmt.Errorf("info: %+v", err) выбрасываем, таким образом добавляя нужную инфу к ошибке слой за слоем. Сорт оф стектрейс. Хотя бы просто прокидывать наверх как есть.
>>3067115 Зачем нам ловить ошибки еще на этапе компиляции, когда можно приводить всё к обобщенному типу и делать вид что пишем на языке без типизации? Ну хз, по приколу, наверное.
А вот с lsp у джавы беда действительно. Они-то есть, но только лишь какие-то жутко всратые от эклипса и нетбинса.
>>3067518 >в котом нет и доли возможностей тулинга IDE джавы LSP имеет спецификацию. Там все возможности описаны. И что такое IDE джавы? Jetbrains, чьи лицензии больше не купить в РФ? А если через 5 лет jetbrains потонет к хуям что в целом можно ожидать, в конторе далеко не лучшие времена сейчас судя по отзывам знакомых, то где коды писать будешь?
>>3067530 > то где коды писать будешь Поэтому давайте прям сейчас писать в блокноте с куском говна прикрученным сверху вместо нормальной ide. Когда потонет, тогда появится потребность и нишу кто-то заполнит. Возможно через lsp надеюсь что нет.
>>3067530 А если завтра упадет метеорит? Тулинг уже есть, то есть написан, даже через 10 лет это будет хороший тулинг.
LSP как раз и ограничен общей для всех спецификацией, опять ситуация сводящая к одному общему для всех. Так что это хрень для всяких кривых блокнотов на электроне, в которых хер даже сорцы по клику прочитаешь.
>>3067616 Да хуета это всё. Даже эмбаркадеро до сих пор живы. А тут контора которая делает практически безальтернативные IDE для джавы, го, питона, с++, пыха, руби и прочая экзотика. Контора у которой многие годы основной бизнес на западе. Должна загнуться потому что >лицензии больше не купить в РФ
Да сейчас не самые жирные годы, все АйТи компании ужимаются.
Насколько сложные собесы в ozon и авито нынче? Если у меня опыт предыдущий в основном в виде питухона и монолитов, то как сложно будет найти себе команду, если технические секции будут пройдены хорошо? Там же у вас наверняка алгоритмы + го + многопоточка на секциях?
>>3066268 Лично мое мнение - канкаренси интуитивно понятнее прочих языков, изи ту лерн - хард ту мастер. Но писать что-то сложное на нем - больно, но можно
>>3066586 Котлин/Джава, шарп. Можно еще натянуть всякую динамикодресню типа жопоскрипта и петухона, если будешь типами покрывать (например jsdoc или тайпскрипт)
>>3068836 Да я уже нашел, именно по первым статьями рассказывалось какие они будут, а есть или нет, не говорилось. Можно было не петросянить и сразу сказать, ведь я упомянул что не стебаюсь. Какая-то травма у вас
>>3069454 Java - это 99% энтерпрайз, финтех +легаси какое-то Проблем найти работу нет. Го - 99% это маркетплейсы, по крайней мере в российских реалиях. Проблем найти работу нет.
>>3070477 Конечно серьёзно. Вот например наша компания ищет стажёров нулевых, лишь бы пришли учиться. Образование, возраст, опыт вообще похуй. Спасибо что пришёл, вот твои гроши. Так все бьются лбом в джаву, питон, сишорп, когда вот рядом дверь в голанг открыта. Компанию не скажу, ибо деанон. Боюсь, что к нам не залетите, так как сотни других кабанов пылесосят всех, кто желает учить голанг. Хаир очень ласковый, берут любого с улицы. Нужно просто захотеть.
помогите с идеями для проектов в портфолио, чтоб и реализовать было не пиздецки сложно и чтоб выглядело интересно (необычно). хочу на стажёра податься, уточнил на тот случай, если вдруг ещё какие-то полезные советы будут, оное очень приветствуется.
>>3070550 В условиях высокой конкуренции много резюме. Твои проекты не посмотрит никто. Чтобы выделиться, надо накрутить опыт. Лучше работай в этом направлении. Подделай резюме, ходи по собеседованиям, запоминай вопросы.
>>3070558 интересно, конечно, но разве такой обман не обнаруживается после вопроса "а что вы делали на предыдущем месте работы?" + пары дополнительных уточнений. Да и для себя наверняка полезно проекты реализовывать
>>3070567 Поэтому гуляешь по собеседованиям и учишься убедительно обманывать. Посмотри как описывают опыт другие кандидаты, заучи наизусть, как будто сам всё делал.
>>3070558 >Твои проекты не посмотрит никто. Я всегда смотрю проекты если они есть в резюме. Просто не надо показывать хело ворлд по мануалу, а если это что-то более сложное то это только плюс. Можно посмотреть как человек пишет код, пишет ли тесты, какие технологии использует.
>>3070697 на что особенно внимательно смотришь в резюме? Я сам на стажировку планирую устроиться, посоветуй, пожалуйста, как позитивно выделиться на фоне других неопытных претендентов?
>>3070706 Во первых надо сказать, что последний раз я отбирал резюме 4 года назад. Сейчас я в большой корпрорации и у нас процесс так устроен что разбором резюме занимаются херки. А я только собеседую буду собеседовать когда найм откроют и пишу фидбек.
А когда я сам смотрел резюме, я смотрел на опыт и на технологии, насколько это релевантно тому что мы используем. И в целом пытался понять уровень кандидата. На тот момент мы 90% кандидатов звали на первое интервью по телефону. 30 минут поговорить про опыт, пара технических вопросов и пара вопросов от кандидата. Дальше если человек понравился звали на очное, если были сомнения могли дать тестовое, или отказ. Но мы джунов без опыта почти не брали.
>>3055290 вот кстати вопрос, есть ли у контекста дроч на регистры поля структуры? чтоб они начинались не с маленькой а с заглавной буквы? а то пытался прописать прямо из модела поля структуры, в моделе пишет что они не юзаются когда как при выполнения запроса и вставки данных тот выдает ошибку что нихуя тебе не будет, хотя импорта и сами поля все в точь точь прописаны, обозначил поля заглавными все стал видеть
>>3073386 >вот кстати вопрос, есть ли у контекста дроч на регистры поля структуры? чтоб они начинались не с маленькой а с заглавной буквы? Ты бы доки по языку почитал бы. Идентификатор написанный с заглавной буквы виден за пределами пакета. Подчеркивания не используются, Идентификатор принято называть camel case.
>>3073386 чувак ты серьезно, это в любом курсе по гошке есть, что есть поля с большой буквы, то они доступны для экспорта в другие пакеты, если нет, то нет
>>3073636 После написании ответа прочитал на счет этого, и оказалось да, это общепринятая вещь которое есть не только в Go. Я Go в частности по структурам на gobyexample гобайпример учил https://gobyexample.com/structs
>>3075370 Как то глупо полагать что человек при изучении чего-либо пользуется только одним ресурсом, вроде бы я не просто так указал что конкретно при знакомстве со структурами в Go, я использовал определенный материал который до этого уже указывал, и в примерах которых поля пишутся не с заглавной буквы.
>>3075433 Go tour это базовая база, проходится за вечер под пару банок пива или за пару дней если с кодом из примеров играешься и ты бы уже не задавал подобных вопросов
>>3076554 По правде сказать, вопрос не был направлен на разрешения какой либо проблемы, просто хотелось узнать мнение людей, а так за рекомендацию спасибо.
>>3077283 Интересно зачем жабодебилы постоянно приходят позориться в готред? Тут одна половина это свичеры с джавы, а друга с пхп, тут люди прекрасно понимают как обстоят дела в индустрии
>>3077404 >Тут одна половина это свичеры с джавы, а друга с пхп, тут люди прекрасно понимают как обстоят дела в индустрии >Поработал в 1,5 говноконторах >@ >Стал экспертом по индустрии
>>3077563 Ну так весь финтех переманивает друг у друга сотрудников, потому что нам нужен сотрудник с опытом работы в финансовой сфере. Эти сотрудники приносят с собой подходы которые они выучили в другом финтехе. Вот и получается, что благодаря перекрестному опылению, схожие подходы воспроизводятся в разных компаниях.
>>3077886 > Мне не нравится как надо добавлять что-то в список или в мапы Экхм, а тут-то что не нравится? > Надо постоянно обрабатывать ошибки. Занимает, наверное, половину всего времени. Это сишечка с горутинами. Не проверил errno - у тебя креш. > что это какой то недопитон, который создавали прокуренные шизы Даже близко нет. > Вообще не пынямаю, за что его любят. За простоту, быстрый вкат, относительно простую конкурентность и кроссплатформенность.
>>3077818 Потому что его создавал чел из Белл лабз, это натурально заря эры ПК. При этом он мог себе позволить не оглядываться на комьюнити и гнуть свою линию спасибо деньгам гугла. Для человека который начинал кодить в машинных кодах, даже for range это неибаццо какой синтаксический сахар.
>>3077912 >За простоту Но го - сложный язык с кучей корнеркейсов, с уже огромным слоем легаси, да даже парсер у него теперь уже неоднозначный, прям как у дидов в си.
В общем. Пацаны. Скачал я этот ваш го часа 3 назад, решил, что было бы неплохо освоить. Потому что пробовал раст и показался говниной какой-то Ниче не читал, решил, что лучшим способом будет - сделать типа эхо-сервер.
Собственно. У меня теперь вопросы. 1. Как тута код по разным файлам раскидать? 2. Как тута подождать завершения этих вот рутин? Создалось впечатление, будто это какое-то fire and forget, но это же не всегда ОК 3. Как классы делать? Я чет вообще не смог нагуглить классов. Ну, если классов нет, то можно ли как-то структуры расширять? 4. Какие тут есть аналоги блокирующих-конкурентных коллекций? Или надо мутексы и вот это вот все делать? Просто я хотел типа таблицу соединений намутить и не понял как это сделать при условии, что там же получается куча потоков и все такое? Или вся эта фигня с рутинами в одном потоке крутится? 5. Как DI организовать? Ну, типа, чтобы я сконфигурировал и нужному сервису нужные зависимости прокинулись. 6. Какие тута есть ОРМ? 7. Что есть для работы с json-файликами? Я просто хотел конфиг туда вынести, и чет тоже не нашел, а парсить руками было лень.
>>3080964 В таких простых задачах горутины вообще не нужны, достаточно одного потока. Будет работать быстрее. И процессы убиваются через стандартное Ctrl+C оно же SIGINT, не надо крутить цикл как у тебя в main. Горутины используются, когда ты делаешь запрос на другой сервер с таймаутом и долго ждешь ответ. Можно нафоркать условные 1000 процессов, можно сделать через горутины, производительность будет одинаковая.
>>3081212 Первые два варианта есть в любом языке, аллокация заданного размера и аллокация с инициализацией. Третье просто универсальный синтаксис создания любых типов. Удивительно, что он и для слайсов работает, да?
>>3080964 >Как DI организовать Создаешь структуру App, где будет храниться указатель на логер, на пул соединений с бд, конфиг итд. И уже в NewApp функции создаешь все свои сервисы, после чего прокидываешь в них все нужные зависимости. Как на жабе в спринге у тебя все автоматом подтягивается из spring-context хранилища объектов, так тут ты все ручками распихиваешь куда нужно.
>>3080964 >Какие тута есть ОРМ Есть Gorm. Но вообще орм не принято использовать. Да и в целом писать бизнес-логику с походами в базу на го это плохой выбор. Лучше котлин или жабу со спрингом для бизнес задач брать.
>>3080964 >Что есть для работы с json-файликами json.Marshal/Unmarshal
>>3083663 Наигрались и хватит, пора на джаву возвращаться. >>3083660 >Да и в целом писать бизнес-логику с походами в базу на го это плохой выбор. Лучше котлин или жабу со спрингом для бизнес задач брать. Что это за язык такой, что самый частый пример приложений не подходит ему?
Почему авторы языка не запретили компиляцию во втором случае? Понятно, что просто 0 возвращать было бы очень странно - хуй поймешь, сумели ли привести интерфейс к инту или нет, поэтому бросают панику. Но разве не проще ли было сделать, как в остальном языке, чтобы попытка приведения значения интерфейса к нужному типу обязательно возвращала value и err. Тогда бы второй вариант попросту бы не скопилировался и не было бы нужды бросать панику.
>>3083660 >Да и в целом писать бизнес-логику с походами в базу на го это плохой выбор. Лучше котлин или жабу со спрингом для бизнес задач брать. Святая толстота
>>3083660 >Создаешь структуру App, где будет храниться указатель на логер, на пул соединений с бд, конфиг итд. И уже в NewApp функции создаешь все свои сервисы, после чего прокидываешь в них все нужные зависимости. >Как на жабе в спринге у тебя все автоматом подтягивается из spring-context хранилища объектов, так тут ты все ручками распихиваешь куда нужно. Надо еще как-то разресолвить граф зависимостей и порядок инициализации, а так говно вопрос конечно.
>>3083929 >сказано что interface{} значит что может быть что угодно Это понятно. У меня вопрос, почему сама операция приведения интерфейса к типу не возвращает два значения всегда. Чтобы нельзя было написать i := x.(int). Чтобы можно было написать только i, err := x.(int). Ну или i, _ := x.(int). Так куда более логично с точки зрения консистентности самого языка.
>>3084086 Ты только что эксепшены. Это не говей. Говей - это придумать велосипед на квадратных колесах и всем рассказывать, что так даже лучше, когда ты едешь и сидушка постоянно бьет по заднице.
>>3083956 >У меня вопрос, почему сама операция приведения интерфейса к типу не возвращает два значения всегда. Это достаточно распространенный в го подход - один метод возвращает значение и err, второй метод обычно называют mustXxx()только значение и панику в случае ошибки. Это нужно чтобы упростить инициализацию переменных в случаях когда ты уверен, что должны быть правильные данные. Например ты хочешь создать тип Regexp, регулярка не меняется тебе не нужно каждый раз писать обработку ошибки, пусть паникует если регулярка с ошибкой.
>>3084086 >а что если бы func x() (T, err) можно было вызывать как y := x() и при err != nil автоматом бросалась паника? Это провоцирует говнокод. Ошибки бывают разные, есть ошибки которые вызваны входными данными и там теоретически можно их избежать, а есть ошибки вызванные средой исполнения, например ошибки чтения по сети. И если разрешить их не обрабатывать то начнут писать говнокод который работает до первой сетевой или дисковой ошибки.
Сап гоферач. Вопрос о двух стульях. Первый: Дёргаем в main функцию из соседнего пакета, которая возвращает указатель на бд/логгер/говно и передаём этот указатель по всему калопроводу через аргументы до самых отдалённых унитазов. Второй: Дёргаем в main функцию из соседнего пакета, которая ничего не возвращает, а записывает указатель в импортируемую переменную того пакета. Появляется возможность сделать db := baza.Bazyuha только в самом далёком толчке без протаскиваний по калопроводам.
Почему в большинстве гайдов используют первый стул?
>>3084627 >Почему в большинстве гайдов используют первый стул? Потому что так больше писать надо, а это говей.
Так ты явно указываешь откуда берётся переменная, проще для понимания. Нет никаких волшебных знаний, что надо дёрнуть функцию А, а потом прочитать переменную Б, что пиздец как не очевидно.
>>3084757 >>3084789 Понимаю. А как тогда в фреймворках сторонний логгер протянуть? Возьмём для примера Gin. В настройках можно задать, чтобы фреймворк плевал свои внутренние логи (типа инфо гет 200) в встраиваемый логгер. При этом сами обработчики находятся в другом пакете и вообще не знают "а чо там у х фреймворка с логами". Аргументы в них не пробрасываются ибо route.GET("/get", handlers.Pook)
>>3085049 >как тогда в фреймворках сторонний логгер протянуть Если интерфейса под это нет, то есть места куда можно просунуть логгер, то очевидно что никак.
>>3085049 Если ты пишешь фреймворк и хочешь пользователям управлять логгированием, то я бы сделал так: создал интерфейс LogWriter, который бы умел писать конкретные сообщения: > LogMessage(level Level, msg string, params ...any) и метод SetLogWriter(). По дефолту инициализировал бы его системным LogWriter.
И методы > myloger.Info(msg, ...params) которые бы уже вызывали тот LogWriter который есть. Ну и всё это упаковать в отдельный от фреймворка пакет, с документацией.
>>3087092 Я бы залетел, но не учил гуланг пока. Насколько реально залететь куда-нибудь с гулангом без глубокого знания фреймворков всяких, во что компилируется язык и т.д. ?
>>3062272 Поясните про пхп в го. Постоянно как речь не заходит про го, то сразу всплывает пыха и наоборот в пыхо сообществах го разраб это как новый этап в развитии пхп погромиста.
Также листал вакансии на хх и постоянно встречаю требования го+пыха
В чем связь? Почему эти два языка идут рука об руку? Почему не го+питон или го+джава или ещё чтото
>>3086705 >опытных жавистов А кому вы нужны? Тем более ты скуфидон. Сколько не работал на гоулэнг проектах, везде команда из упругих зумеров до 25-27 лет. У нас даже лид на текущем проекте 25-летний парень. Это бигтех, если что. Да и твой "опыт" здесь не нужен. Мы в прошлом году уволили целый отдел таких скуфидонов, которые писали на гоулэнге как на жабе, лол
>>3084789 >SOLID, так тесты проще писать Вообще нет, лол. Просто пишешь рест контроллер, из него дергаешь сервисный класс, затем из сервиса дергаешь репозиторий и все. Это нормально, когда сервисный класс имеет 15-20 зависимостей и ты туда дописываешь нужную логику и добавляешь фитчи
>>3087786 Авито многие свои сервисы с php, питона и джавы переписала на го. Но изначально основная кодовая база у них была на пхп. Они постоянно проводили конференции, где рассказывали как круто было отказаться от пхп в пользу гоуленга. Видимо остальные пхп конторы тоже начали их опыт повторять.
>>3088807 >А чего не так с Graal Native Image В том, что его нигде не используют. Это мертвый проект, увы. Причина - нет нормальной поддержки рефлексии. А любая крупная либа в jvm мире это тонны рефлексии. Как там, spring native поживает? Go как раз умеет компилироваться в бинарь и при этом в нем есть поддержка рефлексии полноценная.
>>3090183 Технически в го ничего сложного нет, выучить не проблема. Разве что "сопутствующие" технологии - докер, кубер, рест, грпц и т.д. надо получить.
Тут скорее вопрос в том, сможешь ли ты себя продать. Убедить хрюшу позвать тебя на собеседование. Вот тут надо будет вылизать резюме и научиться красиво пиздеть про свой опыт. Сначала у тебя, почти наверняка, не получится, но со временем вполне реально.
Вечер в хату, вообщем такой вопрос, пишу мобилки на айос уже 10 лет, ситуация складывается так что скоро айос в рф нахуй никому не нужен будет, и еще заметил что ща вакансий на мобилки не так много вне рф, из этого вытекает вопрос, может вкатиться в го? Меня не смущает то что я потеряю в зп первые пару лет, и придется нихуево попотеть, но на выходе если через пару лет стать мидлом то будут одни плюсы. Так как кнопки красить уже не могу, подташнивает. Как вообще смотрят на таких вкатунов? Как на полный долбаебов? Я просто представляю если ко мне придет на собес бекендер с 10 лет опыта на позицию джуна. Мой первый вопрос будет ты че ебанутый?
>>3086705 >Хочу перекатиться в го из джавы есть в РФ работодатели которые берут опытных жавистов на проекты с го? Перекатился на го пока работал жаба-макакой в Сбере. Без потери в зп. Синтаксис и билд систему к тому моменту уже знал, но опыта работы с продакшн реди либами было мало.
Несколько нюансов, отличие от жабы: Билд система непривычная, много нюансов особенно после грейдла/мавена, нужно изучить детально с самого нуля, причем это важнее даже чем знание самого языка. Рантайм позволяет в быстрый TDD без пиздоебства: файл сохранил -> тесты пробежали за миллисекунды/секунды в худшем случае. ГоЛанд объективно хуже идеи в поддержке языка, я пересел сначала на ВСКод, потом на вим (lunarvim + gopls). Горутины ебейшая вешь, но очень легко выстрелить в ногу особенно в вебдеве. Лично я дрочу на контейнеры FROM scratch. Получи контейнер с полностью функциональным рест апи размером в ~30мб. Пока регулярно приходится изобретать велосипеды. В отличии от жабы, пока нет библиотек буквально на все случаи жизни.
P.s: Сейчас в Озоне, никто за джавизм не унижает и не ловит, ревью прохожу нормально. Большинство коллег перекатилось в Го.
>>3088139 Такой хуйни пока не встречал. Адекваты везде приветствуются. Мифический стиль написания на го вырабатывается за месяц, если кроме жабы умеешь в другие языки. Может за 2 от силы, если закостенелый даун.
Здравствуй, двачик. Созрел вопрос интимного характера, на который не смогли ответить ни форумы, ни чатгпт. Тащемта, есть два стула два аккаунта с приватными репами. Один на гитлабе, другой на гитхабе. И жил не тужил, всё работало нормально, пока в один день не отъебнуло ключ. Точнее, ключи в порядке, потому что я могу пулить, пушить и всякое другое делать через командную строку с гитом, однако, при попытке юзать go get для импорта своих модулей в проект он высирает мне ошибку, мол, репы не существует или нет доступа. Я смотрю на это с ебалом лягушки, потому что, опять же, git pull/push/clone работают, значит ssh ключ в порядке. netrc файл тоже выглядит нормально, но ебучий go get не работает... Про GOPRIVATE находил, менял, но нихуя не помогало. Однако, если что-то знаешь, напиши и про него, может быть я там обосрался. Анон, выручай, уже сил моих нет, раз я прошу помощи здесь...
>>3091972 продебаж go get с флагами -v или -x, хз какой из них. а так в целом GONOPROXY, GONOSUMDB, GOPRIVATE, .netrc, .ssh/config это вроде все места где ты можешь проебаться
>>3092574 Перекатился с Явы на Go внутри Сбера, потом через ~6 мес прошел собес в озон. >>3092778 >Сенька литерально получает 200к и там нет премий и бонусов Я миддл, 340к на руки, удаленка.
Гайз как это сделать, вообще не понимаю и в интернете нет нифига. Чето от List[T] в котором *List[T] вообще бошка взрывается https://go.dev/tour/generics/2
Ну че, ради интереса не получился вкат в андроид поучу ваш гулэнг, т.к. на другие бэкенд языки вообще не тянет. Вопросы: 1)Если гулэнг норм живет без виртуальной машины, то нахуя vm делали для джавы и шарпа? Кто из них долбоеб по итогу? 2)Горутины под капотом работают так же, как и kotlin корутины? А то в kotlin я могу почитать его байткод на джаве, т.к. он типа сначала в жабу компилится. Там suspend функции просто return-ом флаг кидают, чтоб функция не блочила выполнение, а на фоне уже операция работает, которая при получении результата возвращает результат в коллбэк, который в параметр функции передается, но кодер видит лишь suspend слово вместо колбэка. Сама корутина с асинхронными операциями представляет из себя объект, у которого invoke вызывается время от времени, а внутри invoke стейт машина, которая в зависимости от состояния выполняет последовательно операции асинхронные, обять же не блокируя выполнение, т.к. return кидает флаг просто, а результаты если что в колбэк объект кидаются и вызывают invoke снова. Я так понял слово go - это аналог suspend fun в котлине, но при этом не надо заранее красить асинхронные функции. Получается компилятор go тупа гигачад, который каким то хуем меняет поведение одной функции в разных местах, смотря на ключевое слово?
Забейте, я думал в гуланге можно не красить асинхронные функции, а вы оказывается просто channel передаете аргументом. В Kotlin колбэки прячутся под капотом с помощью слова suspend, тем самым позволяя писать асинхронный код в синхронном стиле, без явной передачи колбэков или всяких channel-ов.
Сколько в вашу хуйню вкатываться если у меня год опыта с тайпскриптом? Вот прям до уровня возможности проходить собесы на мидла. Всю общую бэкэндовскую хуйню знаю офк, интересует чисто время, требуемое чтобы начать писать калопроводы на ГО, имея жсовский бэкграунд
>>3094502 Зачем? Ты хочешь поменять удобный инструмент на творчество душевнобольных чтобы что? Вместо удобных асинков для людей будет ебаное месиво из горутин и каналов, в котором ты утонешь нахуй.
>>3094475 >Горутины под капотом работают так же, как и kotlin корутины Предполагаю, что в целом нет. Корутины это стейт машина. Горутины это в первую очередь планировщик.
>>3094481 Асинхронных функций тут нет. По сути горутину лучше воспринимать как Thread из мира джавы. И go func() означает, что функция будет запущена в новом треде. И чтобы выполнять коммуникацию между тредами используют блокирующие очереди - каналы. Просто так получить значение из функции, которая запустилась в отдельном треде, разумеется невозможно, так как считай, что у ее горутины стек другой.
Можно не использовать их, а просто через sharing memory по старинке с мьютексами выполнять общение потоков, но это считается плохим подходом.
>>3094520 >функция будет запущена в новом треде Не просто запущена, а поставлена в очередь и запущена потом когда-нибудь, когда освободится воркер. Твой же код продолжит выполнение со следующей строки, а не будет ждать как с async. Чтобы сделать как асинк, надо ебаться с каналами, это говей. Можно было скрыть каналы под капотом, как в других языках, но это не говей, ты должен заебаться.
>>3094509 >Зачем? На ноде практически нет вакансий, а те которые есть - мидлы+/сеньоры с 3+ годами опыта и ебанутой конкуренцией на место. Ну либо ИП Кабан Кабаныч и крипто-блокчейн параша. На ГОшке же куча вакух с годом опыта, конкуренция меньше, ЗПха больше.
>>3094533 Что тебе мешает написать 3 года опыта? Что тебе мешает вкатиться в фулстек на ангуляре? Фулстек на удаленке - это вообще работа мечты, можно ненапряжно делать сайтики разным жлобам и жить на солнечном берегу в деревушке где-то в Болгарии, а не душится в офисе авито.
>>3094537 >Что тебе мешает написать 3 года опыта? Лучше крутить опыт на ГО, чем на Ноде. Ибо на ГО всё равно вакансий в 7-8 раз больше и конкуренция меньше. Я же не один умный такой опыт крутить буду >фулстек Ебал я рот фронтеда, в жизни к этом калу не прикоснусь
>>3094531 Так потребление из канала это и есть await по сути. Напрягает только то, что каналы перекидывать надо туда-сюда. С одной стороны избавляемся от suspend слова, или от Task await как в шарпе, с другой стороны мы теперь должны каналы кидать везде параметрами. Шило на мыло короче, хз. Интересно можно было бы скрыть каналы по типу того, как suspend функции скрывают колбэк под капотом в Kotlin
>>3095213 > с другой стороны мы теперь должны каналы кидать везде параметрами Не должны. Например аналог await Promise.all в го выглядит так: https://go.dev/play/p/C_5UOmjcE_c А каналы это больше для ивентов/потоковой обработки
>>3095332 Для получения результата из функции каналы использую, как я понял, так что их надо передавать, если функция не анонимная, как у тебя в примере.
>>3095332 У тебя WaitGroup неявно передается в твои лямбды. Если ты сделаешь их именованными функциями, WaitGroup надо будет передавать через параметры.
>>3095213 >избавляемся от suspend слова, или от Task await как в шарпе Плохо зделоли тупо. В сишарпе await сразу бросается в глаза, ты пробегаешь по коду и видишь точки ожидания. В голанге эти ебучие стрелочки воспринимаются, как визуальный шум и мусор. Говей такой говей.
>>3096166 >>3096194 Ликбез для самы маленьких и тупеньких channel это тупо блокирующая очередь, аналог BlockingQueue в Java, BlockingCollection в C#, producer(ы) пишет в очередь, consumer читает(ют). Если размер очереди ограничен, то на записи возможна блокировка. Если данных в очереди нет, то на чтении возможна блокировка. В зависимости от API можно читать и писать не блокируясь.
sync/await это вообще нихуя не про блокировки и межтредовое взаимодействие. sync/await это точки где код отдает управление пранировщику шарпорутин. В этих точках пранировщик шарпорутин получает управление и решает, что делать дальше: продолжить выполнение, или продолжить выполнение другой шарпорутины.
По поводу каналов >>3095425 → >Что касается каналов, то в прикладном коде они появляются, когда ты решаешь что-то распаралелить на несколько горутин. Ну так у тебя и в котлине будет тоже самое даже есть каналы https://kotlinlang.org/docs/coroutines-and-channels.html#channels помимо каналов есть и другие способы, но сути это не меняет В Java у тебя будет Structured Concurrency или старые добрые очереди. Не в курсе что там в C#, но sync/await это точно, не про распаралеливание задач.
>>3096616 Поридж, ты тупой. Как работают каналы? На стрелочке горутина делает return и рантайм ставит ее в очередь канала. Когда в канале появятся данные, рантайм возьмет горутину и переставит в общую очередь, дальше ее подхватит воркер и продолжит выполнение. Как работают асинки? Та точно так же, блять. В точке await метод делает return, рантайм ставит метод в очередь, когда у таски появится флаг ок, рантайм продолжит выполнение метода. Технически и горутины и методы сделаны как конечные автоматы. И в го, и в дотнете используются очереди с блокировками. Потому что, внезапно, это многопоточность, без блокировок никак.
>>3096616 Я знаю как работают каналы в голенге. Не понимаю, почему они так просаживают производительность. Условно, мне нужно асинхронно записать 10к элеменов в массив. Беру 10 потоков и начинаю писать данные с блокировкой мьютексом. Получаю среднюю производительность n. Тоже самое, но с небуферизированным каналом: n - ≈ 30%
>>3096669 >Как работают каналы? На стрелочке горутина делает return и рантайм ставит ее в очередь канала. Когда в канале появятся данные, рантайм возьмет горутину и переставит в общую очередь, дальше ее подхватит воркер и продолжит выполнение. >Как работают асинки? Та точно так же, блять. В точке await метод делает return, рантайм ставит метод в очередь, когда у таски появится флаг ок, рантайм продолжит выполнение метода. >Технически и горутины и методы сделаны как конечные автоматы. И в го, и в дотнете используются очереди с блокировками. Потому что, внезапно, это многопоточность, без блокировок никак. Мало того что тупой, так еще и гонору вагон.
Каналы в Го это просто очередь https://go.dev/src/runtime/chan.go максимум, что он может сделать это запарковать тред, и всё. Никаких конечных автоматов там нет и в помине. Треды в го снимаются и прикрепляются к тредам ОС планировщиком горутин, но само выполнение горутины это обычный код без всяких стейт машин. В этом то главная фишка го и состоит - он не красит методы, в отличии от C#.
>>3096750 >Я знаю как работают каналы в голенге. Не понимаю, почему они так просаживают производительность. Условно, мне нужно асинхронно записать 10к элеменов в массив. Беру 10 потоков и начинаю писать данные с блокировкой мьютексом. Получаю среднюю производительность n. Тоже самое, но с небуферизированным каналом: n - ≈ 30% 30% это не такая уж и фатальная потеря производительности, канал более сложная структура чем мьютекс и потому работает медленнее. Он под капотом мьютекс и использует https://go.dev/src/runtime/chan.go с чего бы ему быть быстрее?
>>3096820 В хайлоаде очень даже чувствительно. Зачем тогда вся эта пляска с каналами? В какой ситуации они являются киллерфичей по сравнению с мьютексом?
>>3097022 1. В хайлоаде важнее всего масштабируемость, а не TPS/GHz. 2. Ты взял какой говнопример и пытаешься, на основе его что-то доказать. Для разнообразия можешь взять те же 10 горутин, но синхронизировать их не через мьютекс, а через атомик increment and get для получения индекса. А потом ещё добавить оптимизацию инкремент делать не на 1 а на N. И вуаля, мьютекс говно по перформансу.
>>3097022 Теперь ты знаешь, что такое говей. На любую критику обязательно прибежит шиз и будет доказывать, что так даже лучше и только выиграли. Просто почитай этого ебанутого, он неиронично предлагает писать примитивы синхронизации и полгода выгребать баги на проде которые в нормальных языках идут из коробки.
Пиздец блядь. Один додит использует FIFO очередь, в качестве мьютекса. Другому додику мерещаться предложения писать свои примитивы синхронизации. Третий шиз вообще про стейт машину в Го рассказывает.
Надо было в Раст вкатываться, там тоже шизы, но они хотя бы образованные.
func handleExample(w http.ResponseWriter, r *http.Request) { if r.Method != http.MethodPost { http.Error(w, "Only POST method is allowed", http.StatusMethodNotAllowed) return }
var reqBody RequestBody err := json.NewDecoder(r.Body).Decode(&reqBody) if err != nil { http.Error(w, "Invalid request body", http.StatusBadRequest) return }
// Передача данных в сервисный слой serviceResponse := someServiceFunction(reqBody)
func someServiceFunction(reqBody RequestBody) interface{} { // Здесь можно реализовать логику обработки данных из запроса // и возвращения результата return map[string]interface{}{ "message": "Data received successfully", } }
Настоящие контроллеры выглядят примерно так? Нельзя пост метод где-то прописать вместо того чтобы вручную проверять?
>>3097927 На каждую таску будешь писать кучу велосипедов. Иногда фреймворков.
>>3097810 Gin исключительно в гайдах и используется. Говнокодил на галере в множестве кабаньих стартапов и ни в одном не был использован какой-либо фреймворк. Только самописное говно. Только хардкор.
>>3097881 Более быстрая разработка по сравнению с жабой. Иногда на порядки быстрее. Ну и конечные сервисы значительнее быстрей чем на жабе. Достаточно посмотреть на сервисы вроде яндекс.маркета или недвижимости, а потом открыть авито недвижимость или озон. В целом на проектах где пишут на гоу молодая и энергичная команда до 25-27 лет. На жабе обычно старичье 30+ что-то там пердит в попытках расставить нужные аннотации спрэнг фримверка. Пока одни за неделю выкатывают новую фитчу и лутают бабулес, вторые 2 месяца настраивают хубирнейт и спрэнг фримверк, а потом три месяца дебажат нюлы. Про скорость уже писал. Сервис на гоу стартует за +- секунду-две, пока сервис на спринг буте поднимается несколько минут и раз за разом фейлится где-нибудь в конце т.к. ты снова поставил не ту аннотацию и у тебя наебнулся контекст т.к. рефлекшен кругом, лол
>>3098950 >Особенно повеселило про яндекс маркет >джаваскуфидон не выкупил однослойную Чел... Объясняю.... ямаркет и недвижимость написаны на жабе + спрэнг бут - это медленные сервисы и глючные. Авито и озон написаны на гоу - это круто и быстро. Возвращайся дебажить нюлы по полгода
Салют друзья,в го есть возможность компилировать и запускать гошные файлы переданные в качестве строки. Аналог рефлекшена из джавы. Грубо говоря считать из файла строку,передать ее в какой-нибудь классец и на выходе получить го объект
Можно ли в гуланге написать функцию которая обрабатывает ошибку и вызывать ее при необходимости писать ерр нил? Не дадут ли за это по жопе синьоры? Принято ли ваще так?
>>3099208 Рефлексия джавы не позволяет компилировать код. Рефлексия позволяет создавать объекты, читать/писать значения полей, вызывать методы. Всё тоже самое может рефлексия в Го.
>>3099286 В моем случае я создаю джавовский Callable(поток возвращающий результат) передавая ему содержимое нужного класса как одну большую строку. Не подскажешь в какую сторону смотреть в рамках голанга?
>>3099325 У меня система обрабатывает бесконечные потоки данных по разным источникам(сетевые коммутаторы). Для каждой версии прошивки и для каждого поставщика в частности пишется парсер(на джаве),далее этот парсер создается и запускается с помощью рефлексии на другом микросервисе(тоже на джаве). То есть существует много потоков уже и также относительно часто добавляются новые,также есть потребность в изменении существующих парсеров в соответствии с требованиями бизнеса. Нынешняя система полностью удовлетворяет требованиям и переписываться на го не будет (хотя кто знает что будет через пару лет),спрашиваю в целях мысленного эксперимента. Как ты понимаешь редеплоить сервис при добавлении нового потока нельзя
>>3099538 >И как бы ты реализовал изменение и добавление новых обработчиков без редеплоя? https://en.wikipedia.org/wiki/Over-the-air_update Обновление поступает в виде delta-файла, сравнивается старая прошивка и новая. Потом применяются изменения. Опционально можно отключать функционал на время обновления.
>>3099563 Сравнение прошивок не нужно,там нет обратной совместимости и в помине. Два потока одного поставщика, даже с разными версиями это два независимых потока. Тут видимо нужно прояснить пару моментов. С вышек приходят данные о событиях в сети(набор номера,сброс,перенаправление и тд)+метаинформация. Данные лежат в жатом пережатом+зашифрованном виде. Документация оборудования описывает как эти данные считать. Если важно,то события поступают в файлах с байтовым содержимым,либо с содержимом в формате asn1. На выходе данные можно представить в виде жсона,хмл или любого другого формата
>>3099538 > добавление новых обработчиков без редеплоя Сама постановка вопроса неправильная. Рано или поздно нужно будет рестартарт сделать, не говоря уже о всяких авариях. Первое что мне пришло в голову это очередь, чтобы консьюмеры можно было создавать динамически и делать rollout restart, а так нужно больше подробностей
>>3099538 >И как бы ты реализовал изменение и добавление новых обработчиков без редеплоя? В гуланге так не делают.
Это в джава у тебя если динамическая загрузка и линковка кода. Есть джит который весь код прям в рантайме анализирует, оптимизирует и компилирует в нативный код. Т.е. у тебя код который есть с самого начала, код который загружен потом и код который сгенерирован налету вообще не различаются по перформансу.
А гуланг это статически компилируемый язык, никакой компиляции и линковки в рантайме нет. Максимум что тебе доступно это интерпретатор, сам понимаешь перформанс там далек от нативного кода.
В целом, на гуланге надо реализовать отделение бизнес логики от логики парсеров. И сделать так, чтобы парсеры можно было легко и бесшовно редеплоить не задевая остальную часть.
>>3099642 > Сама постановка вопроса неправильная. Постановка буквально требование бизнеса > Рано или поздно нужно будет рестартарт сделать С чего ты взял? У нас рестарты происходят раз в Х месяцев когда добавляются улучшения в сервис который парсеры запускает > Не говоря уже о всяких авариях. У нас авария,в существующей архитектуре,может быть только в рамках парсера который запускается внутри сервиса. Это не затрагивает не только сервис,который это запускает,но и другие потоки от этого тоже никак не страдают > Первое что мне пришло в голову это очередь, чтобы консьюмеры можно было создавать динамически и делать rollout restart, а так нужно больше подробностей Вопрос вообще не про потребителей. Если в крации: 1)Парсеры это классы(джава,го,не суть). Для простоты понимания можешь представить что на момент нашего общения существует 5 парсеров. Каждый выводит на консоль число. Первый парсер выводит 1,второй 2 и тд. Вывелось число—ты молодец и обработал одно событие. 2)Эти 5 парсеров работают и бесконечно срут в консоль своими числами. 3)К нам приходит потребитель данных и говорит что хочет чтобы по первому потоку хочет видеть в консоли число не 1 а 10. 4)Потом приходит новый заказчик и говорит что хочет чтобы мы обрабатывали новый поток(сделали парсер 6 который будет срать в консоль шестеркой)
Основные требования к системе вытекают из пунктов 3 и 4. Как ты понимаешь просто положить 5 классов-парсеров в коде нельзя тк добавление нового парсера или изменение старого потребуют остановки существующего сервиса и добавление/изменение парсера. Существующая же система принимает мету по потоку(откуда взять данные,куда положить и как обработать (класс-парсер)). И для нужного потока просто создает динамически класс из меты и все работает окай. Изменение старого тоже не проблема,стопнули поток,внесли изменения в мету и стартанули заново. Вуаля,новый класс обработчик,но сам сервис никак не изменился. Добавление нового еще проще, достаточно просто написать парсер и все. При каждый из этих движух остальные потоки не останавливаются,как работали так и работают
>>3099682 > В целом, на гуланге надо реализовать отделение бизнес логики от логики парсеров. И сделать так, чтобы парсеры можно было легко и бесшовно редеплоить не задевая остальную часть. Ну да,надо,просто анон вкинул типо он бы пересмотрел архитектуру,вот я и заинтересовался как бы он реализовал требования средствами го ибо текущая архитектура и требованиям по скорости удовлетворяет и для разработчиков очень удобна
>>3103003 Когда главный скажет, тогда и добавят. Ему из гугла лучше видно. Мы жуки-плавунцы, едим, что насыпали. Сейчас главное не бухтеть, а сплотиться и защищать гошечку от богомерзких джаверов и сишарперов.
>>3052664 (OP) Ребят, не подскажете, есть ли какой-то способ задать ограничение на количество считываемых с консоли символов?
Например, я хочу записать в string три слова разделенных пробелами, но если записываю, например, четыре, то получаю ошибку
Или, например, хочу записать два числа в int1 и int2 в формате "22 45", но если, например, ввожу "22 45 8", то тоже получаю ошибку. На данный момент 8 уйдет в следующий виток цикла, что мне не нужно
>>3103740 >а что такое? В компиляторе как в 70х бюджет 6 букв на имя функции? Лимита нет, но авто предпочитает короткие имена. Потому что сам из 70х, и вообще привык в vim работать. А потом всякие додики спрашивают зачем вам IDE? Именно за этим, чтобы писать длинные и понятные имена функций.
>>3103788 > Ребят, не подскажете, есть ли какой-то способ задать ограничение на количество считываемых с консоли символов? io.LimitReader >Например, я хочу записать в string три слова разделенных пробелами, но если записываю, например, четыре, то получаю ошибку считываешь в буфер максимальным размером N, сплитишь и валидируешь >Или, например, хочу записать два числа в int1 и int2 в формате "22 45", но если, например, ввожу "22 45 8", то тоже получаю ошибку. На данный момент 8 уйдет в следующий виток цикла, что мне не нужно в чем проблема проверить, что ты на 3-й итерации лупа и вернуть ошибку? или вернуть ошибку после парсинга всего инпута?
Сап На днях закончил освоение теории ГО, встал вопрос пет-проектов, хочется уже что-то более осязаемое покрутить. Подскажите, пожалуйста, студентоте без опыта, что берется для пет-проектов и как\зачем\почему
>>3105645 >Подскажите, пожалуйста, студентоте без опыта, что берется для пет-проектов и как\зачем\почему Не надо делать пет-проекты для других. Делай для себя. Иначе это будет имитация полезной деятельности. Это та же самая показуха, как и когда мэр города начинает красить траву во время приезда президента, срочно ремонтировать дорогу, сажать цветочки и т.д. Он тоже имитирует полезную деятельность. Смотрите какой я важный! Как я много работаю! Тоже самое, показуха в армии, показуха перед выборами и так далее. И в итоге мы имеем то что имеем.
>>3105693 Проблема в том, что я не до конца понимаю что такое пет-проект. Точнее я понимаю, что это примерно, но я не понимаю как их придумывать. Я примерно понимаю, что калькулятор может быть пет-проектом, но как будто в рамках ГО делать калькулятор такое себе. Хочется чего-то прикладного что ли
>>3105791 Так возьми я не знаю, свяжись с каким-то благотворительным фондом. Спасение кошек/собак, лечение деток больных пиздецомой, какие-нибудь слепые. И предложи им свою помощь. Так хоть какая-то польза будет. Щас ты силы тратишь в пустоту. Или лучше вообще ничего не делай. Мир и твой будущий работодатель переживёт отсутствие ещё одного 16431-го калькулятора. Когда к тебе придёт крутая идея, вдохновение, такое что прям глаза загорятся, тогда и запилишь свой пет-проект. А если идей нет, не надо пытаться их искусственно создать. Не можешь срать - не мучай жопу.
>>3105857 Так проблема в том что я не понимаю что можно сделать в принципе. Как можно ждать озарения, если непонятно что я жду. Нет же смысла условную нейронку бахать на ГО, надо что-то более из области го. Вот челик выше в треде писал эхо сервер. Если говорить про работодателя, то ему понятно, что не нужен мой калькулятор будет. Вопрос не в том чтобы сделать очень нужную полезную мне вещь, а попробовать покрутить все что я выучил на более менее практической задаче
>>3105869 Ну охуеть теперь. А как же ты учишь то, сам не зная что? Этим надо было озаботиться до того, как приступать к обучению. Пиздец, это тяжелый случай конечно. Открой тогда гитхаб https://github.com/avelino/awesome-go изучай что другие люди создали до тебя. Не надо переизобретать никаких велосипедов, просто изучи существующие проекты и в следующий раз так не делай. Нахуя лезть в то, если ты сам не знаешь куда лезешь.
Кто-нибудь может что такое микросервисы? Это типо отдельное приложение/сервер которая как кубик лего вставляется в подходящий проект? Можно ли на микросервисах зарабатывать? Например, написать что-нибудь и продавать его или в аренду сдавать (сервер поднять)?
>>3107602 Микросервисы - это когда ты берешь монолит и превращаешь в распределенный монолит. Теперь тебе надо в 10 раз больше людей, чтобы поддерживать твою систему. По этой причине микросервисы обожают на галерах, заказчик больше платит. Как ты хочешь, сделать нельзя. Микросервисы уникальные для каждого проекта.
>>3107695 Намного сложнее. Монолит можно просто открыть на компе, расставить брейкпоинты и посмотреть, как все работает. В микросервисах у тебя один сервис вызывает другой, тот третий, пятый, десятый, все их на компе не развернешь. В итоге получается ситуация, когда каждый сервис вроде работает, а все вместе не очень. В монолите транзакциями управляет одна бд. В микросервисах у каждого сервиса своя бд. Сделать атомарные транзакции в таких условиях - это боль и страдания. Особенно, если сервисы пишут джуники. На ютубе есть выступления на конференции хайлоад от авито, как они делали микросервисы, посмотри.
>>3107706 Расставить брейкпоинты и посмотреть что делается в монолите можно, только если у тебя монолит сам по себе самодостаточный и от других сервисов практически не зависит.
У нас на проекте монолит, но у него с сотню зависимостей от других сервисов, которые поддерживаются другими командами. Поэтому просто запустить тесты и подебажить получается далеко не всегда. Ну или писать огромное количество моков, заглушек, что начинает быть похожим на микросервисы, где точно так же хуй поймешь, заработает оно все вместе на тестинге или на проде или нет и приходится полагаться исключительно на описанные контракты между монолитом и сторонними сервисами.
>>3107969 Проще раскидывать задачи на людей. Проще катать релизы. Если сервис, написанный славиком сычевым, внезапно падает в тестинге, то не нужно пересобирать весь релиз с нуля и катить - нужно просто дождаться, чтобы славик внес фикс и выкатил этот фикс в тестинг. Для каждого сервиса свой отдельный ci/cd должен быть. Вот в этом и преимущество. Если работал хоть раз с монолитами, то должен был сталкиваться с проблемой, что релизы становится сложно и долго катать. По сути это и решают микросервисы.
>>3107969 Таки да, порешал. С одной стороны - амазон и микрософт с миллионными бюджетами на рекламу. Проплаченые блогеры рассказывают, как легко и просто и очень недорого поднять микросервисы на aws или azure, любая макака справится. С другой стороны сотни галер топят за микросервисы, ведь чем больше команда, тем больше заказчик платит за разработку. К хайпу подключаются пиздоболы с ютуба и рассказывают одну и ту же методичку про масштабируемость. Про еблю с транзакциями и цену кластера кафки не рассказывают, контент должен быть позитивным. Джуники читаю блогеров, смотрят пиздоболов и думают, что микросервисы - это топчик, а монолиты - кринж для дедов. Такие дела.
>>3107602 >Кто-нибудь может что такое микросервисы? Микросервисы решают задачу менеджмента. Если у тебя в компании работают 100 программистов, проект быстро разрастётся до миллионов строк кода. Его придётся целую вечность тестировать, целую вечность компилировать и целую вечность деплоить. Вместо этого ты даёт этим 5 программистам вот этот сервис, тем 5 программистам тот сервис... Они могут независимо друг от друга работать, им не нужно общее совещание устраивать. Они могут договорится а-ля "мой сервис отправляет такие-то события".
>Это типо отдельное приложение/сервер которая как кубик лего вставляется в подходящий проект? Да! Типа как кубик лего.
>Можно ли на микросервисах зарабатывать? Нууу теоретически можно. Люди продают же API. Грубо говоря, тот же tinypng продаёт же компрессию за десять баксов/10,000 сжатых картинок.
>>3107695 >Ну так это проще поддерживать чем монолит по логике? Ага удачи тебе устроится в компанию где сотня программистов и 10 миллионов строк кода. Расскажешь как это проще поддерживать.
>>3108228 В исходниках той же винды миллионы строк. Тем не менее, им как-то удавалось все писать еще до начала шизы с микросервисами. Никто не выкатывал в прод по 10 раз в день. Потом все обезумели, начали раскладывать базу на 20 серверов и вызывать методы через tcp.
>>3108009 >Расставить брейкпоинты и посмотреть что делается в монолите можно, только если у тебя монолит сам по себе самодостаточный и от других сервисов практически не зависит. > >У нас на проекте монолит, но у него с сотню зависимостей от других сервисов, которые поддерживаются другими командами. Поэтому просто запустить тесты и подебажить получается далеко не всегда. Ну или писать огромное количество моков, заглушек, что начинает быть похожим на Монолиты, где точно так же хуй поймешь, заработает оно все вместе на тестинге или на проде или нет и приходится полагаться исключительно на описанные контракты между монолитом и сторонними сервисами. Во первых, тебе почти никогда не надо будет тестировать функционал который затрагивает все внешние зависимости. Наиболее типичный случай, это когда тебе нужны 2-3 внешних зависимости. Тут можно или на моки полагаться, если функционал внешней системы простой - например ты туда отправляешь данные и все. Или переключить на тестовое окружение, если там более сложное взаимодействие.
Во вторых, чтобы все нормально протестировать - надо иметь qual среду где, уже поднять все реальные сервисы без моков ну кроме внешних систем у которых нет тестовых сред. И там гонять функциональные тесты.
Значица решил я поучить ГО, знаю что шустрый язык, можно сервисы наебашить для моего монолита. Любая хуйня в моей 2летней практике фиксилась либо оптимизацией запроса в БД, либо увелечением оперативки на хосте. И тут мне Яндекс Практикум в бесплатном своем курсе предлагает байтоебить. Задачу то я решил, но я не понимаю, типа вы все тут байтоебите или что? Или эта задачка была специально для челов, которые с низкоуровневых языков решили вкатиться, что бы видели как подобное байтоебство реализовано в Го`шечке?
>>3109329 Ну судя по их слитому коду они не так жестко байтоебят. Но вообще вопрос про другое был, вы парни, тоже байтоебите? или так же как и я - крудошлепите в основном?
>>3052664 (OP) Объясните по хардкору, почему столько людей вкатываются в го? Все такие фанаты микросервисов? Что, блять, интересного, может быть в пилении микросервисов?
>>3109329 Не понимаю как можно байтоебить и двигать микросервисы, буквально одно другому противоречит. Выглядит будто ребята на всех стульях хайпа одновременно хотят усидеть.
>>3111092 Не знаю как в джаве, но в дотнете фактические микросервисы строятся вокруг кучи говна из жоп индусов под названием Entity Framework. Буквально в каждом проекте воняет этой смесью кари и дриста. Нельзя просто взять данные из бд и вернуть джейсончик, надо нахуячить слои абстракции ради абстракции с конфигами ради конфигов. Ну и в целом дотнет считается дешевой хуйней для бедных, где криворукие мартышки из мумбая что-то там педалят, криво косо.
>>3111269 Это аналог Hibernate, да в джаве такое есть. Я про то, что посади тех же индусов на го, и они напилят тебе AbstractFactoryProxyDecorator сколько угодно. Говнокодить можно на любом языке, от этого сам язык плохим не становится и он от этого не спасёт.
>>3111328 Это говорит об уровне долбоебов, которые так и не осилили left join. Задача орм отмапить сырые данные из базы на поля твоих структур, а не делать вид, что бд у нас как бы лежит вот тут рядом в памяти и как-то магически работает.
>>3111358 Сервер имеет смысл поднимать не для юнитов а для e2e тестов когда ты полностью верифицируешь работу функциональности от получения вызова до ответа.
>>3111355 Чето я все равно не понимаю. Вот если у нас гига-стандартный геттер типа пикрил, что тут можно мокать? http.Client - это же стракт, а не интерфейс.
>>3111375 Ты текстиль метод Access так? Тебе нужно сделать новую структуру которая будет в себе содержать http.Server. Можешь поле оставить без названия, так будет даже удобнее. Для этой структуры ты пишешь интерфейс с методами копирующими оригинальные, потом ты пишешь в своей структуре реализацию этих копированных методов (просто прокидываешь данные дальше в реальный метод. Будет что-то типо func (s *MyServer) Do(req http.Request, ...) error { return s.Do(req...) }). И используешь в своих тестируемых методах только интерфейс, а реализацию подключаешь на этапе инициализации RemoteEndpoint. В нормальном коде ты подсовываешь нормальный сервер, а в тестах мок. Надеюсь доходчиво объяснил
Сап гофач. Как детектить тупики в коде? Например, проебал в какой-то асинхронной ветке wg.Done, а в логах куча другой инфы. Хочу как-то логать места, где код затупил на более чем 30 секунд.
>>3113405 Чел, не одной вейтгруппой мир полон. Есть ещё хитровыебанные каналы, потенциально бесконечные залупы типа пока вар пук < вар срёньк, блокировки соединения и прочая хуета. В этом цирке с хуями нормальный стул порой по 3 дня ищешь.
>>3113441 тут согласен. но я хз, правда, ты там свой nginx что ли решил написать, что так заморочился... зачастую можно асинхронное говно сделать синхронным, и не сильно потерять при этом в скорости выполнения. таймауты ещё хорошо помогают, если у тебя куча непонятного асинхронного говна
>>3113837 Много запросов к разным БД, где нет зависимостей результатов друг от друга. Тут как бы синхронизация чувствительно бьёт по времени выполнения.
Ищу работу в UK на линкедыне. Но вакансий как будто вообще нет от слова совсем. Бувально 50-70 штук на всю Англию + Шотланлию + Северную Ирландию. Очевидно, что на Go пишет Гугл, но туда найма сейчас как будто нет совсем. Слышал про Go в Амазоне, но и там найма нет. Но при этом в Гугл и Амазон могут взять с любым бекграундом, если секции пройдешь. Я скорее про обычные продуктовые конторки и галеры, где сидят педалят индусы и пакистанцы, а из местных только лишь менеджеры. Вот там как будто Go вообще нет нигде. Сплошная Java, Python и Js.
Верно ли, что в забугорных конторах Go плохо распространен?
Надо по go искать, он в вакансиях редко называется golang. Но, конечно, будет ещё куча мусора из-за того, что язык назвали как существующее и часто используемое слово. Как будто в первый раз. С C, C++ и C# похожая хуйня, поиск отрезает специальные символы и смешивает всё в кучу.
Но это хуйня на самом деле. Visa sponsorship сейчас нигде не делают, так как на западном рынке переизбыток рабочей силы. Поэтому местных берут, а не привозят из-за бугра.
Тут либо самому пытаться устроиться куда-нибудь на Кипр, в ОАЭ в русскоязычную контору или стартап, если хочется эмигрировать.
>>3114170 Я на питухоне сейчас педалю легаси за лоупрайс. Ищу технологии или места/проекты куда можно свитчнуться.
Как популярная технология в РФ - это Go. Весь крупняк пишет на нем. Там, где раньше был пхп или жаба/питух, сейчас пытаются писать на Го. Но при этом на западе кроме гугла на Го почти никто не пишет, насколько я вижу. Но, справедливости ради, местный айти рынок в Европе это то еще унылое говно.
Лол кек чебурек. В то время, как на жападе поутих хайп вокруг goвна, в рф он находится еще на стадии ретроградного самоподдува. воистину отставание в 5 лет
Падение интереса к языку программирования Go на Западе может быть вызвано несколькими факторами:
1. Насыщение рынка: С развитием других языков программирования, таких как Python, JavaScript, Java и других, разработчики могут выбирать альтернативы в зависимости от конкретных задач и потребностей.
2. Тренды и моды: В мире программирования часто сменяются тренды, и то, что когда-то было популярно, может уступить место новым технологиям и языкам.
3. Недостаток новых функций и инноваций: Если язык программирования Go не предлагает инноваций или новых функций, его популярность может постепенно уменьшаться.
4. Конкуренция: Существует множество языков программирования, и конкуренция за разработчиков и проекты очень высока. Это может также повлиять на интерес к Go.
Несмотря на уменьшение хайпа в некоторых странах, Go остается все еще популярным языком программирования во многих областях, таких как облачные вычисления, микросервисная архитектура и распределенные системы.
>>3115191 Я вообще не понимаю чем фишка Го. Вот например джаву хаят за то что она невыразительная, но потом видишь что Го - это такая же Джава без ООП, но это уже "особый подход", когда вместо добавления фишек в язык ты просто пишешь больше кода и это круто и ново. Называют новым Си, но почему-то со сборщиком мусора, так же как в джаве, но если в джаве это тормознуто, то в Го - это новый Си, круто, быстро, молодежно. Что компилируется в бинарник - круто, так джава это тоже может делать, но если в джаве Грааль особо никому не нужен по заявлениям, то тут это прямо крутая ключевая фишка. Как так?
>>3115346 Даже с учетом GC, в Go сильно меньше оверхеда, чем в жабе.
Грааль в джаве никому не нужен потому что там нет нормальной поддержки рефлексии. В Го при этом рефлексия есть, как и полноценная компиляция в бинарь. Ну то есть компиляция в бинарник по-прежнему нужна, только в джаве ее полноценно не смогли осилить.
>>3115478 >Даже с учетом GC, в Go сильно меньше оверхеда, чем в жабе. Почему?
>Грааль в джаве никому не нужен потому что там нет нормальной поддержки рефлексии. Большинство проектов так-то обходится без рефлексии. И часто вы используете рефлексию в ГО на проде? Это и есть причина все переписывать?
>>3115568 >Почему Большой оверхед на хранение объектов в памяти. Условный List<Integer> весит в разы больше, чем обычный []int в Go с тем же количеством элементов. Так просто исторически сложилось в JVM. В Go оверхед конечно же тоже есть, но заметно меньше.
>>3115568 >Большинство проектов так-то обходится без рефлексии. И часто вы используете рефлексию в ГО на проде? Руками рефлексию применяем редко. Но вот в библиотеках ее достаточно. У нас как минимум либа для валидации на рефлексии целиком работает.
В жабе при этом почти любая крупная либа работает на рефлексии в том или ином виде. Тот же спринг - это рефлексия во всех щелях. Они уже который год пытаются Spring Native выкатить в prod-ready состояние?
>>3115568 >Это и есть причина все переписывать Там, где сейчас работаю, вся кодовая база уже на Go написана. В прошлом месте работы новые сервисы писали на Go, старье на джаве либо переписывали на Go, если там совсем уж кал мамонта был, либо делали свитч на Котлин в некоторых сервисах.
>>3115691 >Динамические вектора это и есть слайсы в Go. Собственно не в том же смысле что и в других языках. Насколько я понял это в том смысле что их длина неизвестна на компиляции. Но расти они не могут, нужно вручную аллоцировать больший массив и копировать туда старый через append. То есть это аналог джавовского Arrays.copyOf(originalArray, newSize). То есть вот это удобно?
>>3116580 >нужно вручную аллоцировать больший массив и копировать туда старый через append Не нужно. append сам аллоцирует память большего размера и сам копирует. В любом случае добавление нового элемента в конец у тебя будет выглядеть как arr = append(arr, element).
>>3116664 >Не нужно. >append сам аллоцирует память большего размера и сам копирует. В любом случае добавление нового элемента в конец у тебя будет выглядеть как arr = append(arr, element). Жопой читаешь? Он же именно про это и говорит: >аналог джавовского Arrays.copyOf(originalArray, newSize)
В целом я с ним согласен. В нормальном языке у тебя достаточно средств, чтобы можно было реализовать коллекции на самом языке. Все коллекции в джаве, шарпе, С++ реализованы на самом язке, никакой магии рантайма. Зато пайтоны и жопаскрипты коллекции реализуют нативным кодом.
>>3116675 Джавовский copyOf всегда копирует. В то же время append в гохе умеет делать in-place добавление в конец массива, если есть свободное место. К тому же заметь, что copyOf в джаве именно копирует с расширением количества элементов, а не просто добавляет в конец массива элемент.
>>3116675 >В нормальном языке у тебя достаточно средств, чтобы можно было реализовать коллекции на самом языке. Все коллекции в джаве, шарпе, С++ реализованы на самом язке, никакой магии рантайма
Ну, если принять тот факт, что сами массивы реализованы рантаймом той же JVM, то да, коллекции вроде ArrayList и LinkedList поверх них строить довольно просто в стандартной библиотеке.
>>3116675 >Жопой читаешь? Он же именно про это и говорит: в слайсах есть такое понятие как capacity, и если в твоем слайсе еще достаточно памяти для аппенда нового элемента, он не будет аллоцировать память. Вы бы хоть базу почитали прежде чем толкать свое мнение.
>>3116875 Нет, если имплементировать как в го - то и оверхед будет как в го. Просто это неудобно, поэтому так никто и не делает. То есть весь выигрыш в оверхэде не в языке, а в желании программиста писать более низкоуровневый код
>>3116718 >Джавовский copyOf всегда копирует. >В то же время append в гохе умеет делать in-place добавление в конец массива, если есть свободное место. К тому же заметь, что copyOf в джаве именно копирует с расширением количества элементов, а не просто добавляет в конец массива элемент. Ну такое на джаве точно реализовать нельзя.
>>3116718 >Ну, если принять тот факт, что сами массивы реализованы рантаймом той же JVM, то да, коллекции вроде ArrayList и LinkedList поверх них строить довольно просто в стандартной библиотеке. Массив и переменная это, два самых базовых примитива. Они в любом языке поддерживаются рантаймом/компилятором.
>>3116796 >в слайсах есть такое понятие как capacity, и если в твоем слайсе еще достаточно памяти для аппенда нового элемента, он не будет аллоцировать память. Вы бы хоть базу почитали прежде чем толкать свое мнение. Ох блядь, вот нерешаемая задача то! Создать класс в котором будет массив и текущая заполненность. Это прям уникальная особенность го, нигде такого больше нету.
>>3116796 чувак загугли про ArrayList, ахуеешь, что не только в Го такое есть ты бы хоть на ютубе что-нибудь про структуры данных посмотрел, прежде чем в тред высираться
>>3117388 Слайсы не аналог ArrayList в плане синтаксиса.
ArrayList это просто класс ничем не отличающийся от других классов, который работает точно так же как и все стандартные классы. Можно написать свою реализацию List и использовать её вместо стандартного ArrayList в любом коде.
Слайс это примитив встроенный в язык, которые имеет специальные конструкции языка которые могут работать только с ним. И если повторить функционал слайса, еще можно, то вот синтаксис работы с ним повторить нельзя. И использовать свой продукт слайсосодержащий, вместо слайс натуральный без консервантов и синтаксического сахара - нельзя.
>>3114084 >Верно ли, что в забугорных конторах Go плохо распространен? Менее распространен чем Java, но в целом вакансии есть и даже побольше платят чем в среднем на Java. Но работу дольше искать и много криптостартапов.
Частенько на ютубе попадаются видео, где какой-нибудь душнила перформит на го, рассказывает, что надо использовать всякие алгоритмы, экономить чуть ли каждый байтик. Но при этом почему-то забывает, что бинари на го весят по 10Мбайт. Даже банальный хеллоуворд получается около 3Мбайт. О каком перфомансе может идти речь вообще? К примеру, на обычном Си хеллоуворлд без всяких ухищрений занимает 16Кбайт. Энтузиасты добивались и меньших размеров вплоть до сотни байт.
>>3119175 В реальных задачах 99% всех оптимизаций делаются через добавление нужного индекса в бд, а сам микросервис можно написать хоть на джаваскрипте.
>>3119415 По сути вот содержимое стрипнутого сишного helloworld. Говна масса, но при этом весит 17000 байт. Часть говна можно безболезненно вырезать. Полюбому это несравнимо с тем, что генерировал golang, когда последний раз его смотрел. При этом гошный исполняемый файл был непереносим между разными дистрибутивами, как ожидалось.
>>3119782 Никто в своём уме не будет на c писать сервер для перекладывания протобуфов в json-ы. На го рантайм за тебя уже делает кучу всего, н за это ты платишь местом и накладными разходами на работу рантайма.
Гоферы, почему вот этот код на джаве - это 20-летнее копролегаси, а на Го он же - глоток свежего воздуха, no-boilerplate, doesn't try to be smart, post-OOP и все такое? Нужно ли было изобретать новый язык и заново строить инфраструктуру вокруг него, и дробить комьюнити когда вы могли так писать 10+ лет назад, сохраняя все наработки джавы? Просто хочу разобраться.
>>3119788 >Для начала полинкуй с musl или убери glibc из линковки. >Если взялся размеры мерять, то добейся статических бинарей и там и там. Ради Hello world? При необходимости я рантайм весь выкину, положу в регистры что надо и дёрну системный вызов ядра write на дескриптор 1 (который есть небуферизированный stdout). У будет hello world размером с меньше килобайта. Там даже линковать ни с чем не придётся.
Но при этом динамически слинкованный файл на сях запустится на большем числе разных линуксов, чем статически слинкованный исполняемый файл на Go.
>>3119822 >static class Struct Бля просто в голос как это жалко выглядит... Особенно если знать об отсутствии value типов которые архитекторы джавы 10 лет пытаются стащить из сишарпа.
Просто не выходи за пределы java треда, пожалуйста. Ты не компетентен обсуждать современное программирование.
>>3119932 Опыт - сын ошибок трудных. Конкретный пример - моя софтина на плюсах. Исполняемый файл запускается на всех современных линуксах, до которых смог дотянуться. Весит около 200 кб, дёргает половину POSIX, в т.ч. pthread.
Собранная на Alt Linux программа на Go на Debian ругается на Kernel API (код ошибку сейчас не назову, но если доебёшь, то ночью выложу сюда).
>>3119936 >Собранная на Alt Linux программа на Go на Debian ругается на Kernel API Play stupid games, win stupid prizes. Разворачиваю все сервисы, написанные на го в scratch-контейнерах (вообще без userspace библиотек). Так что проблема в тебе.
>>3119844 >При необходимости я рантайм весь выкину, положу в регистры что надо и дёрну системный вызов ядра write на дескриптор 1 (который есть небуферизированный stdout). У будет hello world размером с меньше килобайта. Там даже линковать ни с чем не придётся. Так об этом и речь! Что сделать настоящий маленький бинарник можно, но точно не >без всяких ухищрений занимает 16Кбайт
А с динамической линковкой можно потеряться с питоном, там вообще десяток байт будет. А то что там интерпретатор на мегабайты это другое.
>>3119822 Вот именно поэтому мы и уволили всех жава-скуфидонов из конторы, а их помойные говноприложения на спринг буте и хубирнейте просто выкинули и все написали с чистого листа на гоулэнге
>>3119972 Я тебе ещё раз повторяю, кого ебут 100 лишних мегабайт занимаемых на диске утилитой?
>>3120004 Гошные проги даже тормозят? Сдаётся мне, что ты пиздишь. Тормозить могут как раз монстры на плюсах и джаве. А докер например везде летает. Я на ноуте с процом интел 5200у 2/4 и 16гб рамы даже работать могу. Диск, естественно, ссд. Может у тебя там хард до сих пор и поэтому все тормозит? б
>>3120097 Почему уволили? Ну они скуфидоны закостенелые. Им предложили свичнутся в гоулэнг, они попердели два месяца, но высирали максимально ублюдочный код и писали на гоулэнге как на жаве. Ни один пулл реквест мы не приняли и они все написал по собственному желанию. Да и что-то стоящее все равно не написать без спринга и хубирнейта. Правда нам не нужны такие сервисы, которые стартуют по минуте и потом в рантайме что-нибудь отстреливает. Поэтому скуфы пошли на мороз
>>3120113 >Да и что-то стоящее все равно не написать без спринга и хубирнейта. Ну вот же, я привел пример что можно писать на джаве как на Го, и скорость старта будет сравнимая, потому что меньше кода грузить. И как ты и скзаал - ничего не мешает писать на Го как на джаве, т.е. язык тут не причем. Так чего просто не стали писать по-другому на джаве?
>>3120090 >16гб рамы даже >даже Теперь понятно, почему все пофиг на жирные бинарники. Ведь люди даже на 16гб могут работать... Слов нет просто. А дальше что? 128 гб должно хватить, чтобы запустить консоль? А окошко отрисовать пару терабайт?
>>3119913 Как раз джава это один из немногих примеров когда проприетарная технология, смогла стать открытой и driven by community. Для примера можешь загуглить какая сейчас самая популярная сборка JDK
>>3120133 >Ну вот же, я привел пример что можно писать на джаве как на Го Нет, нельзя. Посмотри реальные проекты на жабе и гоулэнге. То, что ты написал - это говно, которое никто не будет поддерживать.
>>3120181 Забыл добавить, что тогда у меня всё работало на компе целерон 850МГц (пень 3 по сути) и 128Мбайт ОЗУ. Тогда даже джава не жрала память гигами, а функционал был тот же. Что изменилось за эти годы - не понятно. Почему ровно такие же программы стали жрать в десятки раз больше ОЗУ?
>>3120243 Бинарники загружается в ОЗУ и ещё сильнее разрастаются за счёт выделения памяти в ходе выполнения. А если ОЗУ не хватает, то начинается свопинг на жесткий диск, а это очень сильная просадка по производительности. Да и сами диски тоже не резиновые.
>>3119071 Ну а в чем разница, приложухи на Qt все равно будут запускаться. Один хуй Qt - это стандарт в мире десктоп разработки, на gtk уже никто не пишет
>>3120388 Я вот не понимаю, что они там пишут на этом го? Консольные приложения получаются с жирными бинарями, выгодней на си написать, десктоп не пишут на го, проще С++ и Qt написать, веб проще на пхп писать, там и фреймворки есть под это, а на го ничего нет.
>>3120134 >опенсорсная Oracle судился c Google за то что повторили API жавы в далвике. С точки зрения оракла апи - интеллектуальная собственность, даром что исходники открыты.
>>3120326 Дешёвые курсы частенько на складчине покупают. Можешь скачать оттуда парочку и посмотреть какую там парашу преподают. Лучше уж взять кредит на крутой курс и пройти его. Тем более, что с зп программиста на го, ты его быстро погасишь. Так что это выгодная инвестиция.
Коллеги, мой php-проект закрывается и меня скоро на мороз, видимо. Полгода ковыряю го, очень нравится, сделал пару микросервисов, больше особо опыта с ним нет. Насколько мне пиздец, если я попытаюсь вкатиться на вакансию миддла го вместо пыхи? И что ждать по зарплатам (я в дс2)?
>>3120648 Никто кроме реального интервью тебе не скажет насколько тебе пиздец. Попробуй, походи по интервью, посмотри что спрашивают. Но я бы сказал что полный пиздец, потому что хрюши отметают по опыту на конкретной технологии. И как тебя выгоняют при закрытии проекта, а не компании?
>>3120687 А сколько опыта надо вообще, чтобы претендовать хотя бы на 200к? Это и так серьёзная потеря, для понимания.
Да мне никто ничего не может сказать вменяемого по поводу смены проекта внутри. Поэтому рассчитывать надо, что выгодят на мороз. Не выгонят - и хорошо, но мало ли.
>>3120684 Ух сейчас напишем cli тулу на джаве чтобы тащить с собой jre, ух ахуенно >>3120004 Используй на своем старом ноуте старые программы и кайфуй от жизни, в чем проблема? >>3120386 Немного жалко что гтк как технология говнище лютое на фоне кют, потому что амбассадор гтк гном лично для меня намного лучше всратых кед >>3120692 Многопоточность отличная, легче и приятнее наверно в мейнстримовых языках нет
>>3120709 >А сколько опыта надо вообще, чтобы претендовать хотя бы на 200к? Это и так серьёзная потеря, для понимания. Ну стандартно от 3х лет наверное
>>3120712 >Ух сейчас напишем cli тулу на джаве чтобы тащить с собой jre, ух ахуенно Всмысле? Го просто упакует тот же рантайм в бинарник, это другое чтоли? >>3120712 >Многопоточность отличная, легче и приятнее наверно в мейнстримовых языках нет Грин треды в джаве есть и в Эрланге
>>3120715 >Грин треды в джаве есть Твои грин треды обосрались, когда начались утечки памяти и прочие приколы. Бесшовного перехода не вышло. Пройдет еще лет 10 пока их допилят до нормального состояния. Ну и API у них мерзотный и многословный
>>3120419 >Лучше уж взять кредит на крутой курс и пройти его. Тем более, что с зп программиста на го, ты его быстро погасишь. Так что это выгодная инвестиция. И что же это за крутой курс по го? Скиллбокс?
коллеги, как учить алгоритмы если я тупой и 4 часа разворачивал список? Имею 3 года опыта, мидл, с задачами справляюсь нормально, но все что связано с алгосами вызывает жжение. Знаю только Го
>>3120942 те которые на собеседованиях спрашивают. Ну там задачки на очереди, на стек, на списки, динамическое программирование, деревья, графы. А придумывать их - ну это вообще шиза, у меня во-первых воображения 0, во-вторых чтобы что-то придумать нужно это понимать
>>3120692 Вопрос в количестве усилий которые надо приложить. Так то и Си хорошо масштабируюется nginx пример. Но чтобы этого добиться, надо очень сильно постараться. А где-то всё работает из коробки.
>>3120750 >Твои грин треды обосрались, когда начались утечки памяти и прочие приколы. Сто раз говорили не юзайте тредлокалы, но проблема у гринтредов конечно.
>>3133020 > >Давно пора уже ... было внести изменения в язык, ломающие обратную совместимость, как это в мажорных версиях других языков регулярно происходит.