Cамого МУЖЕСТВЕННОГО в мире языка Go тред №19 /go/
ВЕЛИЧЕСТВЕННОЕ БЕЗХОМЯЧЬЕ ЛОГО ЭДИШН
Go или Golang — компилируемый язык программирования от создателей таких шедевров, как UTF–8, язык С, UNIX, Plan9 и других. Go поддерживает типобезопасность, богатую и универсальную стандартную библиотеку функций и инновационные семантики одновременности: все то, что мы в индустрии называем concurrency и parallelism. На сегодня язык Go является маяком стабильности, прагматичности, де факто представляет из себя стандарт в мире бэкенд–микросервисов и серверного оркестрирования.
Обсуждаем язык, смеемся с залетных крестоносцев, обсуждаем почему нам не нужны дженерики, наследование и эксепшены, по каждому багу находим трехстраничный пост в официальном блоге Go, объясняющий почему это на самом деле фича, ждем, когда нам завезут дженерики, наследование и эксепшены.
Растобляди завидуют, сектантская запарта не переваривает.
>>2285821 → >Что для вас хуже, или от чего больше воняет: копипаста в соурс коде, или ебанутое нагромождение абстракций? они идут рука в руку, когда люди делают абстракцию и копипастят 15 "независимых" пакетов для своей абсракции, меняя там по одной константе, но в одном пакете неиронично добавляют две новые строчки. в то же время как это всё говно можно было сделать. просто. менее. абстрактным. но, откровенно говоря, напрашивается вывод, что это не дихотомия, а ортогональные проблемы.
Чем вы парсите аргументы командной строки? Стандартный flag урезанная хуета, с тем же успехом можно через os.Args парсить. Нашел вот такой пакет, выглядит пока неплохо. https://pkg.go.dev/github.com/alexflint/go-arg
>>2288242 на стажера опыта в беке вообще не надо. я вкатился, пробуй. один хуй у тебя всего штук 5 компаний куда надо пробовать - авито, озон и т.п. так что дохуя времени это не займет, плюс, если попросишь, то они тебе фидбек дадут. учить шарт/жаву должно быть твоим вторым вариантом, тебе на них все равно с таким же нулевым коммерческим опытом собеседоваться, разве что вакух в говноконторах больше.
>>2288246 >>2288245 Ну можно учить параллельно го и CS, VCS, DB, но с этого, мне кажется, охуеешь, и смысла большого в выборе именно Го не будет. Если есть прям чёткая цель, я бы нашёл толкового препода, который начинает с базы и Си/Паскаля, тогда бы быстрее пошло.
>>2288242 Вкатывайся, работу на самом деле всегда можно будет найти, а с опытом, уже сможешь во всякие озоны и вайлдберсы вкатится. Есть у меня знакомый, который действительно хотел работать и искал на протяжении месяца, ну его и взяли, стажером (trainee) на Rust в маленькую (< 20 сотрудников) контору.
>>2288301 >А через 5 лет обнаружить себя ковыряющим магазины на битриксе. Отличный план. Это значит 5 лет опыта программирования. Битриксом зарабатываешь, остальное для себя делаешь. Один из основных разработчиков Битрикса, Александр Сербул, пишет на Хаскеле и многих других языках, хорошо знает математику. Очень крутой инженер, умный человек. Не плюется и не кидается говном как вы школьники.
Тебе таким никогда не стать. Даже если ты не будешь использовать PHP и Битрикс. Проблема не в них, проблема в вас. Вы ни на что не годитесь. PHP можно использовать как ступень вверх. Вам же гордыня не позволяет. Для вас лучше быть нищим бездельником чем писать на PHP.
>>2290197 Как число STARS коррелирует с использованием технологии? Я например ставлю звёздочку для добавления в закладки, чтобы потом посмотреть. Обычно на этом знакомство и заканчивается.
>>2290439 И да, добавленные проекты публично видны у тебя в профиле ?tab=stars, значит всякие вкатотуси добавляют себе проекты, чтобы выглядеть шарящими.
>>2290440 > значит всякие вкатотуси добавляют себе проекты, чтобы выглядеть шарящими Так это же шиза уровня ревнующих тянок, которые следят кому их парни ставят лайки в инсте. Я провел пол сотни собеседований ждунов, гитхаб публиковала половина, и самое интересное что там было это именно их код, а не то что они лайкали или форкали.
>>2286748 (OP) syntax error: function type must have no type parameters syntax error: function literal must have no type parameters syntax error: method must have no type parameters Ну и нахуй они тогда нужны, если ничего сложного с их помощью нельзя сделать?
>>2291188 Да в говне на всё Особое Видение, делают как угодно, лишь бы не как в других языках. Когда завезут эксепшены, тоже сделают какую-нибудь хуйню так, что никто не захочет пользоваться.
>>2286748 (OP) Вот, подумываю зайти в каждый тред, кроме Си и Паскаля, и обосрать ваши языки. Насчёт С++ не уверен. Он был хорош, пока туда не начали тащить лямбду.
А, так за что я же не люблю golang? Ну синтаксис вроде ничо так, но размер исполняемых файлов это полный пиздец. Понимимаю зачем и почему, но принять это не могу.
В целом есть опции как везде, например, обрезать символы (которые тащатся по умолчанию с бинарником) и узерать размер бинаря в среднем на ~треть и иже с ним. Правда никто не юзает, ибо нахуя.
>>2291610 >>2291753 Бляяя, я обосрался с примером. Это dynamically linked jq весит 300 КБ. Statically linked почти 4 МБ. Но ты всё равно не прав. Размер имеет значение.
>>2291757 Имеет значение для чего? На го пишут энтерпрайза системы, где каждый микросервис - это обернутый в докер контейнер. В среднем гошный сервис весит 10-50 мб. Еще раз для чего и кого это имеет значение? Конкретный пример пожалуйста.
>>2291394 >>2291661 У меня на проектах бинари по 60-120 мегабайт. С одной стороны дохуя, с другой - контейнеры с системными зависимостями и без этих бинарей весят мегабайт по 200-300 >>2291610 Программисты-анальники же
>>2291965 > На го пишут энтерпрайза системы, Это такая хуета, что просто нет слов. Оно конечно работает, но в "энтерпрайза" накладные расходы заоблачные. Какой-нибудь ёбаный сервис для логов и мониторинга отжирает как половина решения.
>>2292127 >бинари по 60-120 мегабайт Очевидно что это бинарный говнокод сгенерированный говнокомпилятором.
Наверное нужен мировой кризис, охуеный такой с общемировой депрессией, банккротством и разрушением производств, чтобы всю шелупонь смыло.
>>2292156 > Очевидно что это бинарный говнокод сгенерированный говнокомпилятором. У нас много зависимостей и кодогенерации, так что не сказать что это прямо поток инструкций говна. Но да, го компилятор оптимизирован под другие вещи, размер бинаря оптимизируют по остаточному принципу. >>2292165 Ты учти, что при исполнении весть бинарь вычитывается в память, т.е. я еще ничего не сделал полезного, а 100 метров памяти уже занял.
>>2292156 > Наверное нужен мировой кризис, охуеный такой с общемировой депрессией, банккротством и разрушением производств, чтобы всю шелупонь смыло. Ыыы бля а лучшы ядирная вайна штоп была! Школотрон, спок, мы тебе не запрещаем лабы на асме и сишке писать.
>>2292156 >Наверное нужен мировой кризис, охуеный такой с общемировой депрессией, банккротством и разрушением производств, чтобы всю шелупонь смыло. Никто тебе не запрещает написать компилятор для Go с динамической линковкой.
>>2291753 ну можешь тот же швейцарский нож написать и он у тебя целых три-четыре МБ будет вместо 1.5. функционал с размером слабо коррелирует. >>2292156 >Очевидно что это бинарный говнокод сгенерированный говнокомпилятором. с такими размерами нихуя очевидного нет, они могут говна себе наэмбедить вроде свагера, у которого веб интерфейс 20 мб сразу отжирает. мне блядь вообще интересно сколько логики на 80 мб в сервис нужно засунуть >>2292127 >С одной стороны дохуя, с другой - контейнеры с системными зависимостями и без этих бинарей весят мегабайт по 200-300 никогда не понимал люди от лени или от незнания скратчем/дистролес не пользуются и тупо шипят даже не альпайн а целую убунту со всем говном >>2292171 >Ты учти, что при исполнении весть бинарь вычитывается в память, т.е. я еще ничего не сделал полезного, а 100 метров памяти уже занял. а ты оправдывайся https://stackoverflow.com/questions/31722881/is-an-entire-static-program-loaded-into-memory-when-launched
>>2292312 >никогда не понимал люди от лени или от незнания скратчем/дистролес не пользуются и тупо шипят даже не альпайн а целую убунту со всем говном зато можно потом потом на продакшне пошурудить как будто в обычном линуксе. И vim нормальный.
>>2292312 > никогда не понимал люди от лени или от незнания скратчем/дистролес не пользуются и тупо шипят даже не альпайн а целую убунту со всем говном Где-то видел статью, что в случае джанго-приложения вообще не важно альпайн это или убунта, т.к. если установить все необходимые зависимости размер образа будет в обоих случаях больше 400 мегабайт
>>2292247 Чтобы те, кто будет администрировать это говно складывали все эти динамические либы в один контейнер с каждым сервисом и конечный результат был ещё больше.
>>2293193 Это константы со значениями, определяемыми во время, компиляции. А мне хотелось бы объявить неизменяемым, допустим, значение, полученное из функции, чтобы случайно его потом не поменять
>>2292841 Я свой первый комп с кассеты магнитофонной загружал. А первый IBM PC/XT компьютер, до которого мог дотянуться, был в студенческой лабе и это был Искра-1030 с 640 Кб ОЗУ и HDD на 10 Мб, на котором умещалась MS-DOS, Turbo-C, студенческие лабы и одна игрушка. Вроде Digger. И всё это было снабжено чёрно-белым CGA-монитором. И игрушки там были не всегда, зачастую студенческие лабы занимали слишком много места.
>>2293268 Го это в первую очередь про еблю в джейсоны gRPC в гугле. Не хочешь такое пилить - попробуй поиграться в горутины и каналы, например в вебсокет-чате, веб-крулере или внезапно гуёвом приложении, например игре.
>>2293334 >terraform Ох и хуета ебучая. Нахуя вам кластеры разворачивать автоматически? Руками что, не судьба? Подъебать бы вас, подсунуть конфиг на пару тысяч мощных инстансов, что хостинг провайдер загнал вас в нищету и долги.
>>2293350 Ох лол, это мне напомнило как я взяв на проекте задачу по Цефу пошел в русскоязычное комьюнити с вопросом по нему, так меня там куча людей обложила хуями за то что я какой-то хуйней занимаюсь, которая им показалась бесполезной (я делал оператор по нему с определенной продуктовой логикой). После этого туда не заходил, стыдно
>>2293395 Ничего не понятно. Понятно, только что твои рабочие таски незнакомые люди отказались помогать делать и обложили хуями. Так по-моему любое коммунити делает. Просто не все выкупают тонкий стеб на английском
>>2286748 (OP) Незнаю по теме пришел или нет, подскажите анонасы, куда копать. Вообщем нужен бот на андроид, для автоматизации, грубо говоря создание кликера с интеллектом, куда идти, что изучать? Какой язык, какая ide нужна? Для игр на android планирую делать программы, которые будут выполнять рутинные действия.
>>2293211 > случайно не поменять Просто научись сосредотачиваться. Я серьёзно: у вас в языке даже нет макросов, которые могут что-то неочевидно менять.
>>2286748 (OP) >Go или Golang — компилируемый язык программирования от создателей таких шедевров, как UTF–8, язык С, UNIX, Plan9 и других. Это ещё что за пиздёжь?
а оно точно так работает? я недавно брал триалку, оно требовало, чтобы я залогинился в jetbrains аккаунт и оно хранит инфу о триалах там. или это надо какую-то старую версию ставить?
>>2295927 Хз, я идеевскими продуктами в основном не пользуюсь. История по коммитам у них очень приятно сделана, только ради этого стоит. Обновил до последней версии, запустил, да, учетку потребовало. Авторизовался, запустил сброс триалки - готово, предлагает триалку на месяц. Полагаю, они инфу о лицензии хранят, но не о триалке
>>2295967 Ну хз, трудно сказать. Я на пайчарме так уже месяца 4 сбрасываю лицензии. Попробуй удалить лицензию, потом накатить скрипт и попробовать триалку.
>>2295971 Еба, челик, если ты работу ищешь - пиши бек, про остальное пока забудь. Если спрашиваешь про то, можно ли написать Х на нем? Можно. Даже перл можно засунуть куда угодно, надо ли только.
>>2296102 пидорасами они стали еще лет десять назад стали, когда ввели подписочную модель вот тогда они основательно в говно окунулись но нет, выплыли как-то
Пишу свой первый яп, никогда таким не занимался. Но уже на этапе получения токенов из вещественных чисел чет проблемы. Полагаю их также надо, как и двузначные операторы числа парсить?
Есть варики устроиться стажером\джуном, если на го вкатиться? А то чет я очкую, кого не спроси - говорят забей, тут только перекатыши с опытом нужны, но я думаю они пиздаболы.
>>2296571 wildberries (может и ozon тоже) на hh набирает стажеров на go. Попробуй отправить резюме, лучше с каким-нибудь своим кодом. Вдруг фортанет. А так да, в основном все ищут уже с опытом go или другого языка. Джунов по факту нигде не берут.
>>2296571 варики еще два года назад были. я понимаю, что за два года всё может поменяться, но я недавно хх чекал и стажеров всё ещё набирали, не вижу причин почему это может поменяться. просто хх чекай епта. алсо в контору пидарасов (вб) не иди если другие варики есть.
>>2296652 С авитой что? Вроде там жёстко попускают на собесах, даже если ты на энтри-левел самый заявляешься. Стоит туда пробиваться? Или искать нормального Джона Бора?
>>2296679 по экспириенсу в авите норм на собесах было и вполне интересно/познавательно. я бы сказал что стоит попробовать. они фидбек дают и даже книжки могут порекомендовать. если не дали, то попроси словами прост, херочка с человечками переговорит и с чем-то вернется. лично я практически обосрался на собесе с задачками легче, чем литкод лизи, но прошел на мидла, что и было моей целью. майлейдж мей вери оф корс. алсо старайся несколько оферов одновременно получить, это вообще изи 20-40% прибавка (хотя если бы я на стажера собесился ради опыта, то мне было бы на это похуй) ждём на хайринг дей короч https://hiringday.avito.ru/go
>>2296733 Что за софтскилы? Я пчёл залетный и не понимаю что вы там проверяете, но вообще умею немного в риторику(черную, белую) это про это? Типа чтоб углы сглаживать в общении с коллегами?
>>2296755 хз честно говоря. лично я себя бы откровенно не пробил, но видимо интервьюеры добрые попались. я чисто зафакапил из-за волнения (там штук 9 на прогаммировании было наблюдателей) на вопросах, которые я знаю, как решить. на фидбек части сказали, что большинство и двух задачек не решили и на самом деле еще хуже можно было обосраться. как я понимаю, у гохи не только нехваток вакух, но и нехваток кандидатов при этом. >>2296741ё ага, углы при общении сглаживать, но при этом высказываться, если тебя что-то беспокоит. "результат начинается с меня", "решай быстро и аргументированно" и всякое такое из ценностей. в финальном интервью была довольно долгая часть с двумя лидами, но ответы, которые они хотят, вполне очевидные на самом деле и просто не будь дохуя конфликтным и т.п.
>>2296781 >решай быстро и аргументированно Всегда проигрывал с этого. Когда условия противоречащие, когда причина ошибки даже близко неизвестна, когда взаимодействие идет с третьей стороной, у которой нет версионности апи и оно меняется со как ебыри у шлюхи
>>2296741 >>2296781 >>2296807 "Софтскиллы" это такое оправдание, что у хэрочки красный день календаря а тимлида попустил кабаныч, так что ты им сразу по фотографии не нравишься и хочется доебаться - желательно без необходимости что-либо доказывать и пруфать.
>>2296341 Я думаю 99.9% обычных не борщехлебов как ты кодеров тебе не скажут ничего лучше "а ты посмотри как в компиляторах других языков устроено", но ты, наверное, и сам до этого дошел.
>>2296733 Я даже скрининг не прошёл туда, лол. Ну да, мотивирует хоть что-то начать делать. Я вот думаю, вкачать гитхаб и нетворкинг и пройти какие-то экзамены с сертификатами, чтоб вот этой хуйни с душными собесами вообще избежать.
>>2296733 ну и почему в вашем гадюшнике одновременно с этим цирком, сняли все вакансии на Go? Я даже оценить не могу стоит или не стоит мне участвовать. Сколько раньше платили мидлам?
не прошел по софтскиллам - это когда полчаса на собесе не можешь держать себя в руках, не выдавая двачерскую натуру и тимлид такой думает, что у него и так уже слишком много долбоебов в команде и нах нужен еще один такой
>>2296571 >Есть варики устроиться стажером\джуном, если на го вкатиться?
Сбер начал понемного гошников набирать на джунские и стажерские позиции. Яндекс тоже. Из традиционного - озон, авито, wildberries. Больше никто особо не берет.
Попробуй по быстрому пройти го тур, забацать пет проект и податься к ним на стажировки. Если не получится, то придется учить новый стек технологий или ждать следующего года, когда снова гошников начнут набирать.
>>2296341 >Полагаю их также надо, как и двузначные операторы числа парсить
Нет, это костыль. К тому же это не простая задача. Парсинг вещественных чисел довольно заебистая задача, лучше открой талмуды по компиляторам и посмотри там
>>2297202 Нет. Как первый язык лучше брать питон или джаву/шарп. Питон просто чтобы научиться программировать. Джаву и шарп чтобы научиться ООП, чистому коду, чистой архитектуре, паттернам, техникам рефакторинга и прочим помойным легасным техникам, которые почему-то в Го очень не любят, но они все равно пригождаются постоянно.
>>2297244 > Джаву и шарп чтобы научиться ООП, чистому коду, чистой архитектуре, паттернам, техникам рефакторинга и прочим помойным легасным техникам Мог бы проще - абстрактные фабрики синглтонов
> которые почему-то в Го очень не любят Зависит от места, где-то всем рулят деды, которые пишут как на сишечке, а где-то перекатившиеся из Джаббы пишут по своим канонам Я как вкатыш из питона и жс даже не знаю что хуже
>>2297240 Да вы, батенька, гений! Вот тупые макаки, сидят токены посимвольно читают, ебалу какую-то с определением следующего символа придумывают. Хуйнул регулярку - дело сделано.
>>2297277 Я, конечно, вайтишник, и много не понимаю, но какой смысл так экономить память? Хорошо, пусть у тебя в теории могут быть десятки мегабайт исходников и ты хочешь потоковую обработку, но посимвольно-то зачем её делать? Неужели у кого-то задница отвалиться, если ты килобайт текста прочитаешь и будешь с ним работать?
>>2297569 Регулярные выражения очень часто избыточны, так же как и printf функции, потому что тянут за собой кучу проверок, преобразований, их стоит использовать, как временное решение. Не только ради экономии памяти, но так же экономии процессорного времени, что гораздо важнее.
>>2297572 Вообще, регулярки сделанны именно так, чтобы было легко преобразовывать их в машины состояний. Если делать это на этапе компиляции, то оверхед от них не так велик. Но почему-то нормальных реализаций подобного нигде, кроме common lisp и, с недавних времён, С++ нет. Нужен язык с нормальным метапрограммированием или много кодогенерации.
>>2294907 Состредотачиваться на протяжении многих часов сложно: обязательно что-нибудь да упустишь. Пусть уж лцчше компилятор по рукам бьёт, где можно. Кстати, const могли не добавить из-за возможных неудобностей с выражениями типа const chtoto, err := f()
А макросы не так неочевидны, так как в нормальных IDE можно посмотреть, во что они разворачиваются. А ещё иногда очень сокращают исходных код и избавляют от ненужного копипаста
>>2297602 > Кстати, const могли не добавить из-за возможных неудобностей с выражениями типа const chtoto, err := f() В го константы это не то же самое что константы в js
>>2286748 (OP) >Cамого МУЖЕСТВЕННОГО в мире языка Go Мужики, у меня VS Code, и он почему-то на некоторых проектах начинает ругаться на импорты изнутри проекта, типа, "project/entity/server не найдено в GOPATH". Почему так, я не понял, package везде корректный стоит. Если в настройках переопределить GOPATH на папку с проектом, то ничего не меняется. Где я обкакался?
Я так понимаю теперь все кто дрочит на аллокации будет дженерики использовать вместо интерфейсов чтобы оно чуть-чуть быстрее работало за счет еще сильнее опухших бинарей, даже не смотря на то что разработчики языка везде пишут что не надо этого делать, это не правильно
Задачка на sql - это просто издевательство.Один join, серьезно? Даже не левый ? Нормального ничего придумать нельзя было?
Верчение деревьев еще более-менее. Но проблема в тестах. Я случайно понял, что полуготовый алгоритм проходит все тесты и отправил задание как сделанное. И так два раза.
И это уж не говоря о том, что деревья нормальный программист вертел только в школке, а обычно он вертит их на хую и копирует рандому либу с гитхаба.
>>2299225 описывай на чем ты УЖЕ программировал. расскажи побольше о проектах с конкурентностью, sql, докером, линуксом Ты ведь ими уже занимался на другом языке? Занимался, да ?
>>2288021 А нахуя тебе программирование тогда? Ради бабла? Я вот вкатился недавно. Думал, что со временем втянусь. Но чет нихуя интереса не ощущаю. И думаю куда дальше катиться.
>>2299692 Как раз нравится, поэтому пригорает от зоопарка языков, в каждом из которых чего-то не хватает или какая-то часть всрато реализована. что не мешает мне на них писать, впрочем
Помогите пожалуйста, нет уже сил!!! У prorobuf есть доп фитчи типа wrappers.proto или annotations.proto. Как я поняла, Они по дефолту спрятаны где-то не там где должны, в итоге импорт в прото-файл не происходит нормально. Я помню что я эту проблему уже решала руками копируя этот пакет в проект, но это, очевидно, не выход. Подскажите пожалуйста как вы это делаете, чтобы выглядело адекватно и красиво? Огромное спасибо!
>>2299779 Какие ещё гибкость и экспрессивность? Язык специально проектировали максимально тупо, чтобы его могли осилить дебилы, которые будут писать максимально тупой код без удобств и синтаксических фишечек, чтобы любой другой дебил мог прочитать.
Я просто охуеваю уже от ебаного говна под названием голэнг вн ашем проекте. Если всю мою попоболь попробовать выразить одной фразой, то я бы сказал так - в других экосистемах ты тратишь время на изучение, но потом появляется возможность избегать РУТИНЫ, в голэнг же пошли другим путем - нахуй изучать, рутина не так уж страшна.
>>2299220 Короче, анончики, я на изи прошёл рекрутёрское зно. Дальше у меня собес с куратором через 3 дня скорее всего, а потом техническое собеседование. Куратор будет проверять мои знания по >пик1, пик2 и пик3 А сеньоры знание языка го.
Но проблема в том что во-первых я нихуя не знаю про го, а во вторых я хоть и изучал всю эту хуйню с пиков, но давно не использовал.
Анончики, дорогие мои, подскажите пожалуйста, как мне за 3-4 дня повторить весь этот кал? Особенно касается алгоритмов и дискретной матеши. А также как мне за такое короткое время хоть как-то познакомиться с основами языка? В вакансии писалось, что знание самого го не обязательно в принципе, но блять, она мне на собесе сказала, чтоб с основами я сам ознакомился перед собесом. Лол. Я вообще даже вчера в первой половине дня не подозревал что мне прийдётся всю эту хуйню повторить/изучить, так что я без понятия откуда начать. И кстати, с линуксом я тоже не работал, хотя ей напиздел, что ставил его на вм.
Чё делать бля??? Отсосу с пруфами тому кто подскажет.
>>2299931 >пик 1 лол это че за хуйня, это какой-то финтех или они просто навернули слов из оглавления учебника. на 99% уверен что затронут максимум пару тем которые затащить можно если когда-то в жизни видел
>>2300184 Меня тут математика смущает, она как будто только для работы с изображениями, аудио, видео подходит. Ну может еще часть от статистики.
Остальное в списке постоянно встречается. Нужно хотя бы помнить о том что такие вещи существуют, и их можно успешно применить для решения самых разнообразных проблем.
>>2300193 потому амортизация или подкидывают до четного. это детали реализации которые в спеке не описаны поэтому сразу шли нахуй если тебе говорят что будет 5 без указания версии
Go is free to provide you more capacity than you request. This improves performance by reducing the number of allocations (and possibly copying) that are required. Capacity is just the amount of space reserved before another allocation would be required.
>>2300206 >потому амортизация или подкидывают до четного. Ты лучше прочитай что >>2300202 написал. Это не "амортизация", и не "подкидывание". Связано с затратами на реаллокацию.
>>2300212 а я прочитал после того как пост написал. однохуйственно подкидывание только не до четного а по табличке >Это не "амортизация", и не "подкидывание". Связано с затратами на реаллокацию. такие противопоставления со "связано с" вместо приведения термина всегда интригуют. вообще в ссылке про алайн, а не реаллокацию говорится и мне кажется как с этим связан всем знакомый паддинг должно быть очевидно. но ты оставил меня в большом волнении почему амортизация апендов не может быть связана с затратами на реаллокацию
>>2300699 ну проверь што он в PATH/GOBIN у тебя есть мб там в настройках тогл надо включить или окно релоднуть прост или ктрл щифт п го рестарт лэнгуедж сервер
>>2301762 В первом случае как swap в c++ работает Во втором ты присваиваешь num1 num2, а потом к num2 прибавляешь num1 в значении num2, тоесть работает как умножение на 2.
Буквально на днях вентилировал этот же вопрос: что учить в 2022 году для разработки >бэкэнда<. Несколько дней гуглил, читал статьи и прочее. Краткие выводы к которым я пришёл для себя (на истину в последней инстанции не претендую):
1) Ванильная Java - уже фактически труп. Учить её сейчас с нуля нет смысла, новых проектов на ней никто уже не начинает. Большое кол-во вакансий и высокие ЗП в данный момент, обусловлены её славным прошлым, большому кол-ву кровавого энтерпрайза в финтехе, телекомах и тп который нужно поддерживать и дорабатывать, и тем, что молодые разрабы в большинстве своём проходят мимо неё в результате чего имеется серьезный дефицит разработчиков.
2) C# медленно, но верно загибается, МС судя по всему будет продолжать активно развивать его, в результате чего он имеет шансы обогнать Java со временем. Т.е. проще говоря он будет терять свою долю рынка медленнее чем Java. Тем не менее учить его с нуля в 2022 тоже нет смысла, главный аргумент тут: он не используется в core-сервисах крупнейших IT компаний мира (разумеется, сама МС не в счет). Пока гугл, амазон или мета не перепишет свою инфраструктуру на C#, смотреть в его сторону тоже не стоит.
3) Думаю, что следующая троица: node+ts, kotlin и golang в течение нескольких лет практически полностью вытеснят java и c# с бэкэнда везде, включая банки, телекомы и тп. В конечном счете всё будет переписано на данных языках. Старые технологии местами останутся, если серьезные доработки не требуются, но с нуля разрабатывать на них уже не будут.
Поскольку, последние 5 лет я пишу исключительно на node+ts (до этого, немного разрабатывал на c#), в этом году я решил изучить golang. Думаю, что спрос на golang разработчиков вырастет в разы в ближайшие годы.
>>2301812 >3) Думаю, что следующая троица: node+ts, kotlin и golang в течение нескольких лет практически полностью вытеснят java и c# с бэкэнда везде, включая банки, телекомы и тп. В конечном счете всё будет переписано на данных языках. Старые технологии местами останутся, если серьезные доработки не требуются, но с нуля разрабатывать на них уже не будут.
Так а что зумеры сейчас изучают? Я вот си шарп дрочил, но го объективно лучше. А другие зумеры какие языки для бека учат? Пхп или питон какой-нибудь?
>>2296733 >алсо старайся несколько офферов одновременно получить, это вообще изи 20-40% прибавка Несколько оферов в твоем этом хайринг дее? Или от нескольких компаний? И как ты торгуешься? Мне чет обычно не предлагают поторговаться, когда я говорю что принял другой оффер, может потому что и так было около верхей границы вилок, хз хотя вроде один раз предлагали, в каспере
>>2302394 У меня так бывало: - Я еще в Х собеседуюсь, офер должны дать Д числа - Ок, держи в курсе, скажи сколько дадут - Я тут офер от Х получил, дали М После этого они как минимум дают столько же. Можно пойти в первую компанию и назвать им контроффер, ведь ты им тоже сказал что начал собеситься в Y и они тоже попросили держать в курсе.
>>2302403 Если чисто по гошке, то Устройство слайса, как работает аппенд, отличие стрингов от слайсов байтов Устройство мапы, как работает вставка/итерация Устройство канала, как работает отправка Устройство интерфейса, тайп асёршны, рефлексия Как работают горутины, что происходит при блокирующих/неблокирующих сисколах, что в пакетах sync/atomic и когда использовать Как работает шедулер, что за M:N, воровство жоб, когда шедулер может переключить исполнение горутины Как работает гц, маркинг, фазы гц
>>2302503 Да, language server не работает вообще. Только эти ебучие сниппеты. И проблема не гуглиться нихуя, везде пишут мол включи ls и всё, но там стоит эта ебучая галочка. gopls установлен.
>>2302818 не обязательно. на джуна простят, если ты не знаешь как в точности гц/шедулер/каналы работают. на стажера могут про слайсы спросить, но про мапу/каналы/гц/шедулер вряд ли. однако тут вопросов буквально на одну-две лекции, это реально все знать могут и должны. но это база, на мидла/сеньора в дополнение будут ебать по реальным задачам и архитектуре.
Правда ли, что на разработку Go забили? Пайк ушел, Томпсон ушел, никакого развития. Топ контрибьюторов - ноунеймы, трансухи и телки. Популярность падает, новой крови нет, либы не пишутся, на го2 все забили, а любое нормальное нововведение просто невозможно из-за уебищного фундамента.
>>2299931 Харьковский? Видел недавно эту вакансию. Выучишь очень быстро го, если ещё не завалил собес то советую внутриности подробнее разобрать, как работают вещи по типу GC, планировщика, особенности работы с слайсами и мапами.
>>2302961 Да, лол. Завтра собес с лидом, а потом ещё технический собес. Ну надеюсь время будет хотя-бы пару дней между ними, чтобы разобраться во всём.
Что такое проброс ошибок наверх, который приходится делать в го? Это когда C вызывает B, которая вызывает A и если ошибка случилась в А, то я её отображаю как будто зафейлилось B? Зачем это?
>>2303087 Получается всё так, как я описал? Не понимаю почему нельзя вывести ошибку на уровне чтения файла (сискол же происходит не в моём коде, а в рантайме?)
То есть у нас допустим ошибка чтения из-за того что диск поцарапан или просто что-то не прокнуло, поэтому я вывожу на фронтенд не саму ошибку, а «что-то пошло не так, попробуйте снова»?
>>2303226 Привет! Я вкатуся и просто спрашиваю что имеется в виду под пробрасыванием ошибок наверх. Других языков не знаю и загуглить не получилось. Я не пытаюсь спорить, просто хочу знать что это и как правильно это делать (на это отвечает вопрос «зачем»)
>>2303075 Ну допустим у тебя есть такая вложенность функций: f -> g -> h. Любая ошибка должна обрабатываться в f, ошибки которые будут возникать в g и h, должны быть просто возвращены, либо дополнены и уже потом возвращены. Вот пример: https://go.dev/play/p/DMy24KHvoRk
>>2303216 >>2300184 Ну, вообщем, в требованиях было написано реально по существу.
Мы обсуждали алгоритмы, паттерны, потом когда я высчитавал какой алгоритм быстрее мне предел функции пригодился, логарифмы. Затронули теорию графов, принцип работы структур данных. Потом мужик спрашивал как бы я охарактеризовал качественный код, моё личное мнение. Спрашивал с чем я работал, есть ли у меня реальный опыт. Ещё он задавал много тонких вопросов, таких, что сразу видно разбирается чел или нет.
Какое же ебаное Govno. Почти все проекты либо от ноунейм контор, либо переписывание старого кода с пыхи или питона на го. Уж лучше вкачуся в Kotlin/Java backend, там явно посолиднее компании и проекты.
>>2303348 Всё, прошёл ещё технический собес, где чел спрашивал буквально поверхностную инфу которую я в http://golang-book.ru/ узнал. Рекрутёрша сказала, что меня приняли, осталось только подписать документы и чё-то там обсудить ещё с кем-то. >>2303994 Ну я знаю c# c++ js и всё впринципе. Надо было только написать красивое резюме и повторить темы, указанные требованиях. А вообще мне реально повезло с интернатурой, и не могу сказать что надо, чтобы с нуля вкатиться на го жуниора, например.
>>2304333 Ну сказали типа во время обучения платить будут 600-800 даларов во время обучения 2-3 месяца чтобы было что пожрать и мы могли сфокусироваться на обучении, а потом средняя зп джуниора и собственно работа на проекте. Я не знаю нормальная ли это практика, или просто мне повезло.
>>2304357 Просто я контактировал со знакомыми, которые устраивались на похожее обучение с трудоустройством на пхп и яве, и обычно, просто набирают группу студентоты на бесплатное обучение, а в некоторых компаниях берут в натуральное рабство, где ты должен отдавать 30-40% от зп какое-то время после обучения.
>>2304385 HAC РЕKОМЕНДУЮТ ДРУЗЬЯM!!Добpый день!!! Mы обеcпечиваем:быcтpoту и кaчecтво предocтавляемых услуг! Рaботу выполняют квалифицированные, чeстныe, вежливые рaбoтники. Гpaждaнe РФ и PБ! Cтоимоcть предocтaвлeния уcлуг догoвoрная oт 1300 p/cмeна. Как нaличный,тaк и безналичный раcчeт. Прeдлaгaем качественные услуги за разумные деньги.В сфере строительства работаем более 15 лет! У нас несколько проверенных временем бригад , которые выполняют качественную работу. К выполнению работы подходим с душой и полной самоотдачей!!!Работа по всему Екатеринбургу и пригороде!!!
>>2305171 Там вопрос был в том, что синтаксис or или and для тегов был очень неудобный + не очевидный. Можешь найти соответствующий issue на гитхабе, мне лень его искать.
>>2305207 С дженерикам ждем покращщень, на сейчас есть только https://pkg.go.dev/container и внешние пакеты, всё на интерфейсах. > Потому что даже без Set жить крайне сложно. попробуй map[T]struct{}
Аноны, есть смысл пытаться вкатиться в Го без опыта разработки? Ну как без опыта, я на ларавеле несколько сайтов запилил, сейчас думаю начать работать в программировании. Читал сравнение зарплат, в Го они одни из самых высоких. Джуны без опыта работы нужны где-нибудь или не самый лучший язык для вката?
>>2306701 В тиньке нужно уметь решать олимпиадные задачи по программированию. Не просто литкод и кодварс, а именно околоолимпиадные, на динамическое программирование. Подавал 5 раз в тинек и каждый раз получал отказ. При этом сколько задач решено - никто не говорит. Просто говорят, что не прошел и все. И так каждый год.
>>2306696 Была стажировка в wildberries и туда было не так сложно попасть. Сейчас не знаю. Яндекс, авито, озон, VK - будь готов к дрочеву на собесах, и скорее всего тебя не возьмут. Больше джунов и стажеров никто не нанимает, насколько мне известно.
>>2306747 Пчел, ну если для тебя харды на литкоде кажутся простыми, то молодец, иди в тинек. У меня решать харды не получается, как и у многих других, поэтому я заранее предупреждаю анонов, чтобы сильно не рассчитывали туда попасть, если они не олимпуси
>>2306712 >Не просто литкод и кодварс, а именно околоолимпиадные, на динамическое программирование. Это называется литкод медиум+.
>>2306764 >У меня решать харды не получается Ну ты попробуй не с хардов начинать, а с какой нибудь казуальной книжки в стиле "грокаем аглоритмы" и изи задач.
>>2306849 Это подходит под уровень "литкод медиум"? Я вот решал на литкоде медиумы на sliding window, деревья и списки, но имхо в тиньке задачи гораздо сложнее
>>2306875 Нет, это уже хард ещё и с ограничениями. Тащемта, ты написал про динамическое программирование как про что-то ебическое, я на это и стриггерился.
>>2306892 Да понятно, что задачи уровня кузнечика решаются легко. Какая-нибудь двумерная динамика уровня хода коня тоже просто понимается. Но этого не достаточно. Нужно уметь решать задачи уровня того, что я скинул. А это явно не 2-3 месяца и даже не полгода задроства на литкоде, а гораздо больше (для среднестатистического студента или вкатуна)
Как дела в мобилках у go+fyne? Есть ли какие-нибудь живые проекты, чтобы посмотреть, что вообще на этом можно сделать и, как все это будет выглядить? Желательно ОС, чтобы на код еще посмотреть.
>>2307107 Интересный конечно порог входа, а что по вилкам там, хрюша светила? Если готов к таким заёбам — можно и в гугол устроится, как-то же они набирают при этом штат.
>>2307116 >Как дела в мобилках у go+fyne? В мобилках — мёртворождённая хуйня без задач, там сплошной натив. Кроссплатформа — хорошо если 1 из 7 приложений по крайней мере на iOS, на ведре всем более похуй и её больше.
Тащемта, хочешь кроссплатформенные мобилки — велком ту флаттер. До первой задачи с камерой/датчиками/бохатыми пушами/итд — пойдёшь лобзать натив на обоих.
>>2307161 Мне не нужен кроссплатформенный код, я просто хочу вкатиться в мобильную разработку, только под андроид, без жабы, котлина, дарта (не нравятся эти языки просто).
Какой вообще долбоеб придумал сделать джаву нативной?
>>2307159 Это задачи на стажера. То есть где-то 60-70к за 40 часовую неделю. Во всяком случае до войны так было. Как сейчас и потом - уже неизвестно. В штат в тинькофф идут люди с олимпиадным бекграундом - студенты физтеха и ВШЭ, которые по каким-то причинам не попали на стажировки в FAANG или в яндекс.
К слову, на мидла и сеньку вроде тоже просят решать довольно тяжелые алго задачи, но уже полегче))
>>2307170 >хочу вкатиться в мобильную разработку, только под андроид, без жабы, котлина, дарта
Придется учить котлин либо дарт. Чем они тебе не нравятся?
>Какой вообще долбоеб придумал сделать джаву нативной? Нативная она в том плане, что была основным ЯП для разработки вплоть до 2018 года. Так-то там все на особой виртуальной машине работает. Почему так сделали - в нулевые языков особо-то и не было, жаба была одним из самых популярных и очевидных вариантов.
>>2307179 >В штат в тинькофф идут люди с олимпиадным бекграундом Тащемта, тогда понятно.
>К слову, на мидла и сеньку вроде тоже просят решать довольно тяжелые алго задачи, но уже полегче)) Я ахуел наверно от того и опешил. Вообще не представляю как на такое завести синек — там же воронка будет в стиле 1 из 1000.
>>2310751 Если его заблокируют, то будет проблема для программирования в РФ в целом, а не только с Go, но размещать пакеты можно не только на нем или их можно загружать через VPN.
Мне больше интересно, будет ли Go востребованным, если закроют поставки компонентов, а аренду серверов за границей сделают невозможной, опять же из-за тех же санкций. Такую информацию я не слышал, но все равно было бы интересно узнать.
>>2310787 > будет ли Go востребованным, если закроют поставки компонентов, а аренду серверов за границей сделают невозможной, опять же из-за тех же санкций. Думаю да, надо будет более экономно использовать ресурсы уже имеющихся серверов, то есть переписывать 95% массового пхп-говна на го. Битрикс просто удалять сразу.
>>2310751 1. есть официальный кеш пакетов, так что если только гитхуб сдался, то должно еще скачиваться 2. у больших компаний наверняка свой кеш есть, у нас недавно отключение от гитхаба уже тестили 3. кто-нибудь накачает пакетов через впн и поднимет свой 4. в крайнем случае будем жить на то что мы навендорили меня вообще уже года 4 удивляет, что в рашке какой-нибудь яндекс еще не поднял свой аналог гитхуба
>>2310971 > меня вообще уже года 4 удивляет, что в рашке какой-нибудь яндекс еще не поднял свой аналог гитхуба Щас поднимут, точнее распилят на этом денег, а по факту какой-нибудь гитлаб развернут, кек.
>>2311145 >Щас поднимут Зачем? Гитхаб не приносит деньги, а яндексу нужны только деньги, выделять для этой задачи сервера в момент дефицита компонентов и санкций, они скорее всего не будут.
>>2311154 Какая аудитория будет у этого "Я.Хаба", Россия, Беларусь и кто-то еще? Откуда в этих компаниях будут деньги, чтобы поддерживать подписку? Такое может быть, только если государство решит проспонсировать, но решит ли оно? Для кого вообще, российские компании будут писать код, чтобы им платили деньги?
>>2311178 > Какая аудитория будет у этого "Я.Хаба", Россия, Беларусь и кто-то еще? Да, рашка и Беларусь. А что? Сам поисковик тоже только у нас юзают. Да и хостинги многие выбирают рашкинские. Всё полностью частное, без гос.спонсирования. > Откуда в этих компаниях будут деньги, чтобы поддерживать подписку? А откуда у них деньги на битбакет? > Для кого вообще, российские компании будут писать код, чтобы им платили деньги? То есть ты думаешь, что рроссийске айти - это исключительно аутсорс?
>>2311260 >Собственно вопрос, есть ли список пакетов отсортированных по популярности, чтоб заранее всё выкачать Кто их поддерживать будет и зачем тебе пакеты, которыми ты не факт, что воспользуешься?
>>2311416 >Как ты это замерял? Это ясно, код на Си, если в нем используется взаимодействие с системой, перестает быть переносимым. Си не знает, что такое асинхронщина, не знает, как работать с сетью, не знает протоколы, он ничего не умеет, кроме работы с памятью и выводом данных. В отличии от го.
>К тому же на сишке куча готовых и стабильных библиотек, аналоги которых на go ещё нужно написать. Для чего эти библиотеки, нужны ли они на беке серверов, иначе зачем они в го?
>>2311447 У меня появляется отвращение, если проект не в едином стиле, даже импортированные пакеты с неподходящим под него стилем, вызывают такое чувство и желание писать код пропадает.
>>2311516 >Напиши какой-нибудь микросервис, который принимает жсоны, обрабатывает их, сохраняет данные в БД и возвращает ответы. Описал всю работу горазработчика.
>>2310868 Походу нет)) Оракл сейчас это в первую очередь их база данных и облака. Джаву пилят в openjdk люди из оракла и еще кучи других контор. Думаю, если у вас нет анальной привязки к Oracle Java или их базе данных, то ничего не изменится
>>2310787 >будет ли Go востребованным, если закроют поставки компонентов, а аренду серверов за границей сделают невозможной, опять же из-за тех же санкций
Ну, в РФ сейчас выиграли те, у кого были свои сервера. Го брали обычно чтобы крутить на амазоновских серверах свои микросервисы.
А откуда можно почитать с начала? Т.е. не сам синтаксис, а вся эта ебала с gopath, goroot что там еще юзается, импользования go mod для разработки своего модуля/для обычного импорта готовых в свой сайтик и т.д.? Алсо, на русском теперь тур недоступен?
>>2312453 >А откуда можно почитать с начала? Т.е. не сам синтаксис, а вся эта ебала с gopath, goroot что там еще юзается, импользования go mod для разработки своего модуля/для обычного импорта готовых в свой сайтик и т.д.?
>>2312465 >реализованы каналы Зачем тебе знать реализацию каналов, когда язык "из коробки" кросс-компилируемый и их реализация плавает в зависимости от платформы?
вопрос к знатокам: если я отвечу на вопрос "В чем различие стрингов и []byte?" в духе "Стринг иммутабельный тип, т.е. я не могу изменить какой либо символ в строке, если же по каким-то причинам мне нужно изменить его, необходимо использовать []byte, скастовав string" --- интервьюеру понравится? или я лох
>>2312511 Если ты будешь использовать массив байт для изменения символа, то ты изменишь только 1 байт, иначе тебе придется писать относительно огромную логику изменения символов из байт, а в го уже есть руны.
>>2286748 (OP) gomobile рассчитан только на треугольники в опенжле? Как выделять текст? Как его вообще рендерить? Где формочки? Хуета без задач, а хайпа-то было уууу
Есть какой курс с заданиями чтоб в го вкатиться? Смотрел на степике, но там какая-та ссанина от школьников, их там в каждом модуле в коментах поправляют. Говно и моча.
>>2313129 Нах тебе задания? Сам себе не можешь выдумать? Для совсем элементарных уровня черепахи - codewars, посложнее на алгоритмы - leetcode, но практические знания тебе дадут только реальные проекты. Ну напиши мультиплеерную игру с чатом, например.
>>2313135 Да чтоб ты спросил блять, тебя ебет вообще? Отвечай на поставленный вопрос либо иди нахуй, сразу видно, что ты поридж до ненужных вещей дело есть.
Мне так проще, когда есть итог под темой в виде пары заданий. Но ты вообще залетный, раз такие советы даешь > мультиплеерную игру с чатом, например. Ссу тебе на ебало.
>>2313162 Долбоеб пориджный, там задачи для отработки алгосов, а не по фичам языка. Ты вообще не понимаешь реквеста, увидел задачи и начал гнать очевидную хуйню про литкоды и прочее говно. Дебил.
>>2312511 понравится, но если ты про изменение символа хочешь рассказать, то слайс рун упоминай. также про различия в итерации по строке/слайсу байт хорошо бы упомянуть
>>2313161 > Но ты вообще залетный, раз такие советы даешь С хуя ли? Я дал практический совет, в данный момент сам это делаю для изучения языка и всей его обвязки. Хули ты тут слюной брызгаешь? И зачем го учишь? По твоему поведению понятно, что РАБотать тебя никуда не возьмут, причём именно по софт-скиллам, кек. А больше половины нужных знаний в реальной жизни - это не сам язык, а обвязка вокруг него. Логирование, профилирование, инфраструктура, докеры-хуёкеры.
А гошка у буржуев вообще как? Рабочий инструмент али диковинка, нахуй не нужная? Коллега съебался пару лет назад в Лондон, потом в Дубаи. Все на гошечке, но тем не менее, вакансий как там вообще?
>>2313135 >напиши мультиплеерную игру с чатом, например Есть гайды как писать такое и продумывать архитектуру? Хочу написать клон агарио, но не знаю с чего подступиться
>>2313673 >Хочу написать клон агарио, но не знаю с чего подступиться HTML+JS+API, более подробно google: "js как рисовать на странице", "js отправка запроса на сервер", "golang http сервер", "golang json", "js отследить событие нажатия клавиши", "js получить координаты курсора на странице" и т. д.. Научись пользоваться поисковиком.
>>2313697 В итоге получается фронтенд дрочево и немножко логики на бекенде. Так ведь? Вообще стало казаться, что бекенд сейчас не более чем прослойка между фронтом и БД. Вся движуха на фронте сейчас.
>>2313740 Как ты игру без фронтенда представляшь? Визуальную новеллу в консоли? Чисто бекенд проект написать имхо невозможно, так или иначе придется на фронте очень много работы проводить, иначе твое говноподелие, отдающее кривые джейсоны, никому не будет интересно в принципе.
>>2313673 Не пиши никаких игр, ни мультиплеерных, ни каких бы то ни было ещё. Там всегда будет много клиента и мало сервера, потому что сервер в таких проектах в основном для синхронизации, и в итоге появляется ложное ощущение того, что > бекенд сейчас не более чем прослойка между фронтом и БД Например, в энтерпрайзе так никогда не бывает, там всегда дохуя разнообразной логики на бэке, а фронт - это сплошные однотипные формочки для вызова этой логики. Только такое сложно представить в качестве учебного проекта, так что да, ищи курс с заданиями, либо пиши какую-нибудь сетевую залупу типа P2P-мессенджера.
>>2313673 Так прикол именно в том, чтоб писать всё с нуля самому, без подсказок. Конечно, если ты будешь гуглить, ты может и готовые варианты найдёшь. А так набиваются шишки, опыт. Не, ну можешь писать физзбазы и притворяться настоящим программистом.
>>2313313 т.е. ты иммешь ввиду, что если loop'ом иду по строке, то получаю только индексы, а если по слайсу, то тупл (индекс, значение)? Тогда я видимо не понимаю смысла подъеба в вопросе "Чем отличается стринга от слайса байтов"...
Пытаюсь задокерить простенький го сервер с одной страницей
Вот докерфайл
FROM golang:1.16-alpine WORKDIR /go/delivery RUN go mod init ex123 COPY go.mod go.mod COPY main.go /go/delivery/ RUN go build CMD [./ex123] EXPOSE 8080
ошибка следующая /bin/sh: [./ex123]: not found
Я уэе весь на говно изошел, понимаю что где то в пути проеб, меня на все возможные варианты. Что не так ?
Попытался пощупать этот ваш го. Вы че ебанутые? Что это за смесь паскаля си и еще какого-то говна? Вы че угараете каждый раз писать fmt.Println почему нельзя просто Println
>>2314522 Имена в пакетах могут дублироваться, чтобы избежать коллизии существую пространства имен, если добавить возможность их отключений, как например, using в C++, то код станет говном, в котором будет не понятно, что и откуда. Паскаль умер уже давно, но люди все еще его вспоминают.
>>2314522 Попытался пощупать этот ваш джаваскрипт. Вы че ебанутые? Что это за смесь си джавы пхп и еще какого-то говна? Вы че угараете каждый раз писать console.log почему нельзя просто log
Подскажите нюфагу как лучше сделоть. Допустим в main инициализирую подключение к бд, надо как то получить доступ к этой переменной из другого пакета, чтобы каждый раз не передавать её аргументом, потому что это выглядит тупо. Может есть какой то лаконичное решение?
>>2317672 Он имеет в виду, что с самим сайтом. По слухам, их ломанули хохлятские диверсанты и зашифровали нахуй весь бэкенд с данными. Всё, нет больше вилдбирриса.
>гугл 0 нормальных ссылок на их стажировки\джуновские позиции выдаёт А они и не брали джунов почти. И стажеров тоже. Хотя в треде кто-то отписывался, что попал к ним на стажировку несколько лет назад, а потом его уволили оттуда. Вообще практически никто сейчас не набирает джунов и стажеров, когда на рынок вывалилось очень много разрабов с опытом.
>>2317617 >wildberries Жидко дали в рейтузы и ушли в мир иной.
>>2315621 Написал в тестовом, требование - обмен картинками по grpc, ну дальше гугол и вот так и сделал. Но не взяли, т.к тогда в вебе не работал никогда, но зато взяли на питон. Так и не понял, по каким критериям надо делить проект на микросервисы.
>>2318044 > Так и не понял, по каким критериям надо делить проект на микросервисы. Его не надо делить на микросевисы без весомых причин. 95% любителей микросервисов - каргокультисты, как, впрочем, и любители того же СКРАМА. https://www.youtube.com/watch?v=gfh-VCTwMw8
знакомые съебали в Грузию и сказали, что могут пролоббировать меня джуном. Посоветовали Go учить. Ну я и начал. Тут эти непонятные дженерики выходят. На каком этапе их надо начать изучать? Вот я теперь эту книгу штудирую. Адам Фриман Pro Go Полное руководство по программированию надежного и эффективного программного обеспечения с использованием Golang. 2022г. Как раз для меня всё разжёвано. Но там про дженерики ничего нет. Спасибо
Вышла новая версия go с дженериками https://go.dev/doc/go1.18 Из плохого: 1) углубили гуглозонд, который встраивает прямо в бинарник ещё больше инфы о вас. 2) исходники у зависимостей теперь не все скачиваются (будете тратить дополнительное время на поиск и скачивание исходников, когда микрософт внезапно заблокирует гитхаб).
>>2318134 3) из-за дженериков время компиляции серьёзно замедлилось. 4) поломали совместимость со старыми ядрами линукса, теперь версия должна быть не меньше 2.6.32. 5) go get теперь не работает (куча прежних книг и документации с инструкциями по установке у новичков вызовет проблемы).
Так, наконец-то появились вменяемые функции для работы с коллекциями. Когда можно будет ожидать появления set, treemap, treeset в стандартной либе? Может потом через лет 5 аналог stream api завезут вменяемый и на го наконец станет возможно писать без постоянных унижений
>>2318150 Проще написать альтернативный компилятор, чем каждый раз искать и выпиливать явные и скрытые гуглозонды. А ещё лучше использовать тот язык программирования, который не прибит к корпорастам, имеет множество компиляторов.
Какая же всратая хуйня, этот ваш Говноленд... Неужели нельзя было раздуплиться и за полгода (или сколько там уже дженерики в бете были) запилить их нормально? Вот, жрите, пример из го тура подсвечивается красным.
бляяя сука. не могу запустить эту хуйню. снёс старую версию и поставил новую. после source $HOME/.profile показывает версию, а после перезапуска терминала нет. опять надо $HOME/.profile. сука забыл как первый раз ставил.
>>2319055 А, ну да, как же я сразу не догадался, что язык греческий, все же и так понятно, ну да, точно! ЗАЧЕМ ИСПОЛЬЗОВАТЬ ОТЛИЧНЫЕ ОТ АНГЛИЙСКОГО ЯЗЫКА НАЗВАНИЯ В КЛЮЧЕВЫХ СЛОВАХ ЯЗЫКА?
Аноны, а кто-то может подсказать годную статью про устройство GC в го? Все статьи, которые я находил, были очень старые. И в комментариях там люди писали, что статья, конечно, хорошая, но многое уже устарело
>>2319451 Производительность ниже (из-за GC), размеры бинарников больше. Несколько дубовый синтаксис, например отсутствие тернарника чувствуется. Непривычная объектная модель. Гораздо меньше готовых решений.
В остальном Go действительно более прогрессивен и прост (в хорошем смысле).
>>2319849 До 24.02.2022 в целом можно было, если напрячь жопу и устроиться в какой-нибудь тинькофф или вайлбериз стажером. Сейчас в тинькоффе гошную тему прикрыли, а валдбериз жидко пукнул и обмяк. Конторы поменьше просто закрылись или приостановили найм. Поэтому лучше подожди пока военная спецоперация закончится, потом уже думай куда нужно вкатываться. Вполне вероятно, что придется вкатываться не в веб хуйню, а на завод.
>>2319956 >Сейчас в тинькоффе гошную тему прикрыли, а валдбериз жидко пукнул и обмяк А что с озоном и сбердевайсис? слышал, что вроде им тоже нужны разрабы
>>2320518 Про сбер не в курсе. Сегодня слышал, что они вообще найм остановили на многих направлениях.
Озон вроде набирает стажеров, но хуй знает как туда попасть. Но если готов работать по 40 часов в неделю, то наверное озон нормальный выбор для тебя. Потому что стажеры обычно студенты, которые не могут столько работать.
>>2320915 На старт набирают, но вот в финтех школе на полгода минимум приостановили гошные программы. Да и то, ты знаешь сколько там на старт берут? Человек 15-20 от силы. А желающих около 5-10 тысяч. Раньше было проще выиграть грику и уехать чистить унитазы в штаты, один хуй получать будешь в десятки раз больше чем на стажировке в тиньке.
>>2321118 Идиот, ты бы хоть ознакомился с чем-то, прежде чем спрашивать. Раз ты не умеешь искать и читать информацию в интернете, тебе и в программирование дорога закрыта.
>>2321174 Я тебе ещё раз повторяю: ты не умеешь искать и читать информацию в интернете, тебе и в программирование дорога закрыта. Мне вот делать нехер больше, чем за тебя гуглить, если ты тот же ебитень не нашёл до сих пор, то ты хохол.
А можно как-то организовать артефактори для модулей? Чтоб не качать их напрямую с гитхаба? А то этот подсер js макаки совсем пошатнул доверия скачивать напрямую с гитхаба. И подтер же сука историю коммитов, чтоб не доебывались кто в танке был
>>2321491 А кто мешает 10 мейнтейнерам в сговор вступить и подосрать? А каждую зависимость, у которой зависимость заебешься просматривать на предмет обновлений
>>2321118 А что ты собрался для себя писать? На джаве так-то и игры можно писать, да и вообще почти все что угодно, десктоп утилиты, фронтенд и т. д., но другое дело, что для этого есть куда более удобные инструменты. Кто тебе запрещает на го писать хуитки для себя? Правда я не знаю, что ты собрался писать для себя. У меня как-то все идеи проектов были либо слишком масштабные (написать аналог викимапии/народных карт яндекса, распределенное хранилище с поддержкой SQL запросов и т. д.), где нужно въебать охуилиард времени и в итоге забить от бессилия, либо банальщина уровня телеграм ботов, который 3 раза в сутки парсит какое-нибудь авито и выдает результат парсинга пользователю, которая пишется на любом языке за пару часов. Вообще не знаю, как люди находят идеи пет-проектов для себя. Может быть ковыряться в опенсорс либах и фиксить баги интересно + полезно. Писать что-то свое, нужно быть охуенным спецом с огромным багажом опыта.
У меня нубский вопрос, стоит ли для статики юзать nging? Ну Т.е. насколько сам http модуль справляется? Речь не о хайлоаде, но на будущее. Все равно всё заканчивается на cdn, хоть с прокси хоть без
>>2321355 >Я тебе ещё раз повторяю Ты мне ничего не повторял. >ты не умеешь искать и читать информацию в интернете, тебе и в программирование дорога закрыта. Умею. >Мне вот делать нехер больше, чем за тебя гуглить, если ты тот же ебитень не нашёл до сих пор, то ты хохол. Вместо пруфов своих слов, ты высрал хуету.
>>2321839 > Умею Зачем тогда этот троллинг тупостью? Я же прямо в своём сообщении, которое ты цитируешь, назвал фреймворк для игр, на котором их уже запилили энное количество.
>>2322667 >Я, конечно, не сторонник глобальных переменных >>2322665 >Глобальные переменные лучше, чем бесконечные get/set в остальных языках. >>2322667 ?
>>2322594 А вообще как принято конфиги хранить в го? В питоне, перле как правило обычный файл с расширением языка и там константами перечислено. Для куба, например, переобпределяется через yaml. А тут?
>>2322741 А тут ты должен каждый раз, когда понадобится одно поле из конфига, открывать файл, читать его целиком, закрывать, а прочитанные байтики парсить как json, из результата взять одно поле, остальное выкинуть. Иначе не Go Way.
Пытаюсь скомпилировать через openwrt. Сыпет ошибками:
1. Беру чистые исходники: https://github.com/Macronut/Pinocchio Ошибка: main.go:19:2: local import "./dns" in non-local package main.go:20:2: local import "./proxy" in non-local package main.go:21:2: local import "./service" in non-local package
2. Поменял в main.go "./dns" "./proxy" "./service" На "github.com/macronut/pinocchio/dns" "github.com/macronut/pinocchio/proxy" "github.com/macronut/pinocchio/service" Ошибка: main.go:19:2: no required module provides package github.com/macronut/pinocchio/dns; to add it: go get github.com/macronut/pinocchio/dns main.go:20:2: no required module provides package github.com/macronut/pinocchio/proxy; to add it: go get github.com/macronut/pinocchio/proxy main.go:21:2: no required module provides package github.com/macronut/pinocchio/service; to add it: go get github.com/macronut/pinocchio/service
3. Закинул файл go.mod в корень исходников: module github.com/macronut/pinocchio go 1.18 require github.com/williamfhe/godivert v0.0.0-20181229124620-a48c5b872c73 Ошибка: service/pinocchio.go:15:2: local import "../dns" in non-local package proxy/mystify.go:17:2: local import "../net/ipv4" in non-local package proxy/mystify6.go:13:2: local import "../net/ipv6" in non-local package proxy/mystify.go:18:2: local import "../net/tcp" in non-local package service/pinocchio.go:16:2: local import "../proxy" in non-local package
4. Меняю пути во всех файлах как во втором пункте. Ошибка: proxy/proxy.go:52:2: array index 15 out of bounds [0:15] proxy/ttl.go:20:6: TCPInfo redeclared in this block /root/Desktop/openwrt6/build_dir/target-mipsel_24kc_musl/Pinocchio-0.1/proxy/mystify.go:21:6: previous declaration proxy/ttl.go:26:6: htons redeclared in this block /root/Desktop/openwrt6/build_dir/target-mipsel_24kc_musl/Pinocchio-0.1/proxy/mystify.go:29:22: previous declaration note: module requires Go 1.18
5. Меняю go 1.18 на go 1.17 в файле go.mod. Ошибка: proxy/proxy.go:52:2: array index 15 out of bounds [0:15] proxy/ttl.go:20:6: TCPInfo redeclared in this block /root/Desktop/openwrt6/build_dir/target-mipsel_24kc_musl/Pinocchio-0.1/proxy/mystify.go:21:6: previous declaration proxy/ttl.go:26:6: htons redeclared in this block /root/Desktop/openwrt6/build_dir/target-mipsel_24kc_musl/Pinocchio-0.1/proxy/mystify.go:29:22: previous declaration
Как чинить? На картинке файл proxy.go (ошибка proxy/proxy.go:52:2: array index 15 out of bounds [0:15])
>>2325726 >>2325732 git clone https://github.com/Macronut/Pinocchio cd Pinocchio go build Пропробуй, возможно ты что-то сломал, возможно проект уже сломан, но если в нем не указан алгоритм сборки, то все должно так работать. Или проект говно.
>>2325732>>2325734>>2325741 Попробовал другие исходники, теперь выдает: cp -fpR ./files/ /root/Desktop/openwrt6/build_dir/target-mipsel_24kc_musl/Pinocchio-0.1/.pkgdir/Pinocchio/ cp: cannot stat './files/': No such file or directory
Открывал смотрел все файлы в исходниках - нигде нет пути ./files/* - что это может быть?
>>2325749 >Попробовал другие исходники Какие? >Открывал смотрел все файлы в исходниках - нигде нет пути ./files/* - что это может быть? Очередное быдлокодерское решение.
>>2325767 Мне анон скинул починенные исходники, сказал что оригинальные исходники кривые: http://0x0.st/oq98.gz >Очередное быдлокодерское решение. Можно это починить редактированием исходников? Я понятия не имею где искать, т.к. я не линуксоид даже близко, мне просто надо прогу скомпилировать и поставить на роутер. И заодно спрошу. Почему у меня убунта так сильно лагает на виртуалке? Когда перетаскиваю окна все тормозит и лагает, есть большая задержка. На винде-виртуалке такого нет даже близко. После моих 144 hz глаза дико устают.
>>2325773 >Можно это починить редактированием исходников? Да. >Я понятия не имею где искать, т.к. я не линуксоид даже близко, мне просто надо прогу скомпилировать и поставить на роутер. Возможно проблема в используемом тулките для сборки, возможно проблема в том, как ты собираешь, возможно проблема в том, что проект написан индусом. Много причин. >Почему у меня убунта так сильно лагает на виртуалке? Убунта говно.
>>2325823 >потому что я уже успешно собрал это (тоже на GO) Я слепой или в репе 0 го-кода, а это просто пакет для какой-то системы? >Я создал по аналогии Makefile для Pinocchio ... >Как починить? >>2325789 Возможно ты не так собираешь.
Разве "GOOS=linux GOARCH=mipsel go build" не может собрать для openwrt?
>>2325944 Тогда удали нахуй строку $(CP) ./files/* $(1)/ из своего (созданного на другом) мейкфайла, чтобы убрать эту ошибку.
>cp -fpR ./files/ /root/Desktop/openwrt6/build_dir/target-mipsel_24kc_musl/Pinocchio-0.1/.pkgdir/Pinocchio/ >cp: cannot stat './files/': No such file or directory
>>2325959 Ты вроде исходники менял, с относительного-локального пути импортов до абсолютного-удаленного (то есть на гитхабе), верни, как было и попробуй еще раз.
>>2325951 Удалил tar и запустил компиляцию, он по новой его скачал, теперь нет ошибок: (1, 2, 3, 4, 5) >>2325726 Видимо они были из-за строчки: $(CP) ./files/* $(1)/ которую я удалил Но ошибка осталась та же: Finding targets go: warning: "github.com/macronut/Pinocchio/..." matched no packages
Building targets no Go files in /root/Desktop/openwrt6/build_dir/target-mipsel_24kc_musl/Pinocchio-0.1/.go_work/build
>>2325972 >в директории с проектом пропиши Я не понимаю. В makefile? Компилирую через openwrt, не из директории проекта. Из папку openwrt. В ней папка package. В папке package папки программ с файлами, в том числе makefile на каждую. Компилирую командой: make package/pinocchio/compile V=s
>>2325982 >/root/Desktop/openwrt6/build_dir/target-mipsel_24kc_musl/Pinocchio-0.1/.go_work/build cd /root/Desktop/openwrt6/build_dir/target-mipsel_24kc_musl/Pinocchio-0.1/.go_work/build && ls -l И листинг сюда, хуй знает, что там у тебя происходит внутри.
root@123:~/Desktop# cd /root/Desktop/openwrt6/build_dir/target-mipsel_24kc_musl/Pinocchio-0.1/.go_work/build && ls -l total 8 drwxr-xr-x 2 root root 4096 Mar 31 00:21 bin drwxr-xr-x 3 root root 4096 Mar 31 00:21 src
>>2326045 >в проекте нет go.mod Есть в исходниках, которые мне анон скинул: http://0x0.st/oq98.gz С ними такая же ошибка. Содержимое go.mod: module github.com/macronut/pinocchio go 1.18 require github.com/williamfhe/godivert v0.0.0-20181229124620-a48c5b872c73
Как в го формировать урл из параметра и обработать? Т.е. в питоне во фласке что-то типа @blueprint.route("/url/<name>") @blueprint.route("/url/<path:varargs>/<name>")
И могу обращаться к /url/123 и к /url/qwe/2345
Т.е. что-то вроде подкаталогов, которые формируются из бд/файловой системы
>>2326609 A local DNS server let TCP connection resolve hostnames through proxy by return fake IP addresses Альтернатив на линукс не нашел. На винде такое делает Proxifier: >it is impossible to get a real IP address through a proxy so Proxifier has to assign placeholder (fake) IP addresses like 127.8.. which are only valid within the local computer Задача резолвить через родные DNS прокси. Proxifier это умеет. На линуксе все что находил это проги, которые тупо шлют DNS запросы на указанные DNS сервера, к примера гугла. Это вообще не то что нужно.
>>2326778 Можешь попробовать, поднять SOCKS прокси и через iptables контролировать конечные домены.
Будет такая схема: "Машина во внутренней сети"->"Внутренний управляющий сервер с прокси"->"Файрволл на сервере, который запрещает пакеты на определенные адреса"
>Что это значит? Хуевые формулировки использовал, но кратко, то iptables позволяет указывать правила обработки пакетов, значит ты можешь с помощью него указать, чтобы пакеты отправляемые на example.org перенаправлялись на условный 192.168.0.255, но я не помню может ли он работать с доменными именами. https://www.opennet.ru/man.shtml?topic=iptables
Поднимаешь SOCKS5 прокси на роутере, настраиваешь iptables на нем, на внутренних машинах указываешь соединение через SOCKS5 и адрес роутера. Должно работать.
>>2326794 Может я не так объяснил? Мне надо чтобы DNS шли от провайдера сокса, как на первой картинке. А у меня получается только как на второй. И при этом все нужно делать на роутере, без каких-либо манипуляций на компе.
>>2326787 >>2326794 Возможно достаточно будет просто iptables, не помню, как передаются данные через роутер в интернет, возможно он (iptables) их тоже может обрабатывать.
>>2326798 У меня щас следующая схема на роутере. 1. На порте 1234 висит проксификатор, в конфиге проксификатора прописан сокс тайланда. TCP трафик отправляется на порт 1234. 2. На порте 5555 висит DNS сервер, в конфиге DNS сервера прописан DNS cloudflare, UDP трафик отправляется на порт 5555.
Что изменить в этой схеме, чтобы было как на первой картинке: >>2326797
>>2326800 Ты тупой? Ты когда подключаешсья к интернету, то тебе DCHP провайдера выдает свои местные провайдерские DNS сервера. В данном случае провайдер Contabo Asia Private Limited
>>2326803 >1. На порте 1234 висит проксификатор, в конфиге проксификатора прописан сокс тайланда. TCP трафик отправляется на порт 1234. SOCKS5 прокси поддерживает UDP, почему бы тебе просто не перенаправлять все запросы на него? >2. На порте 5555 висит DNS сервер, в конфиге DNS сервера прописан DNS cloudflare, UDP трафик отправляется на порт 5555. UDP трафик это не DNS трафик, у тебя потенциальная утечка данных в сети получается. >Что изменить в этой схеме, чтобы было как на первой картинке Для меня это просто набор адресов. >Ты тупой? Нет. >Ты когда подключаешсья к интернету, то тебе DCHP провайдера выдает свои местные провайдерские DNS сервера. Если бы он мне их выдавал, я бы смог без настройки DNS сервера на машине использовать доменные имена, но я так не могу, а значит мне никто не выдавал DNS.
>>2326820 >мне никто не выдавал DNS. Твой провайдер всем клиентам говорит прописать днс гугла в настройках адаптера? >SOCKS5 прокси поддерживает UDP Не поддерживает значит.
>>2326824 >Поддерживает. Ты похоже реально тупой. Если бы он поддерживал, то я бы не пытался несколько дней скомпилировать pinocchio. Иди читай как работает DNS.
>>2326829 >Ты похоже реально тупой. Скорее всего не я. >Если бы он поддерживал, то я бы не пытался несколько дней скомпилировать pinocchio. Ты выбрал хуевый проект, который был заброшен 3 года назад, не имеющим документации, с очень низким уровнем кода, засрал половину линукс-треда в /s, пытался написать Makefile на основе другого, но не решился почитать документацию по сборке Go программ для openwrt, вместо использования поисковика ты срешь на двачах. >Иди читай как работает DNS. Расскажи.
Вместо решения проблемы, ты обвиняешь других, какой же ты бездарный.
>>2328062 >авито а они набирают сейчас? В озон уже месяц на позицию стажера динамят по 10 различным вакансиям :( просто не отвечают на посланное резюме
>>2328117 посмотри на их сайте прямо вакансии, там голанг вакансий много, без указания middle/senior в тайтле (такие отдельно тоже есть) и без требования коммерческого опыта
>>2328123 за бугром го ценится и очень развит, посчитай сколько репозиториев с голанг на гитхабе и звезд по сравнению с другими проектами, зп до 600к доходят но в снг для ждунов все плохо, это правда, да сейчас у всех все плохо
>>2327538 Ну что, работал в провинциальном аутсорсе, занимался бэкенд-разработкой - C++ использовался в проектах чисто по идеологическим причинам. В команде ни у кого не было почти никакого опыта бэкенд-разработки, поэтому учиться было, в общем-то, не у кого. Чтобы не было стыдно перед забугорным менеджментом, начал читать всякие учебники и статьи про базы данных и распределенные системы. Потом случилось так, что решил искать новую работу. Написал резюме generic "бэкенд-разработчика", среди языков написал в том числе Го, который на работе использовался около двух месяцев - забугорный менеджмент захлестнула микросервисная лихорадка. На следующий день получил чуть меньше десятка предложений, выбрал самое интересное, скрыл резюме :-). Поболтали с рекрутершей, отсобеседовался пару раз и готово - теперь я Го-программист. На собеседованиях была только БАЗА - никаких вопросов по фреймворкам и бредятины в духе "готовы ли вы отдать жопу за дядю Боба 100% покрытие тестами и принципы SOLID". На изучении и понимание C++ потратил довольно много времени - на работе никаких стайлгайдов не было, приходилось самому искать "стандартные" способы делать всё по-нормальному. Наверное, теперь я всё, что было специфично для плюсов, забуду, но это какая-то польза от этих поиском была, я думаю.
>>2328167 Перечитал пост, подумал, могло создаться впечатление, что резюме было в духе "и швец, и жнец" с максимумом баззвордов, но нет - оно было вполне честное, про каждую "технологию" писал продолжительность и контекст использования, уровень владения - типа, вот в этом хорошо разбираюсь, а с этим только использовал готовый SDK, и т. п. Про Го была пара строчек, и честно написано про 2 месяца. Те, кто набирает Гошников, не ждут КОММЕРЧЕСКОГО опыта 3 года именно на Го. В этом он выгодно отличается от условной Джавы, где для переката обязательно нужно будет дрочить Спринг и т. п.
>>2328145 >может в резюме дело 3 пет-проекта, шарю за Redis, Docker, GHA. Ожидаемой зарплаты вообще не стоит, хочется хоть за еду поработать чтобы опыт получить))
>>2286748 (OP) Приветствую гоферов. Подскажите - есть ли команда, скачивающая сторонние покеты, определенные в импорте? Или для каждого пакета надо использовать go install packagename?
Подскажите, как подобный таск решить на Го? Дан целочисленный массив nums, выведите на экран true, если хотя бы одно значение встречается в массиве как минимум дважды, и false, если каждый элемент различен. Сижу уже сутки и перебираю разные варианты, свои додумки и адаптации из гугла, но что-то пока херня выходит. Отмечу, что тут даже не слайсы, а базовый массив только..
>>2286748 (OP) Какие ваши мнения по поводу go после февральских событий. Касательно тех, кто не уезжает. Да никто не знает Будешь ли ты считаться стажёром, если имел много опыта на других языках, а гошку только начинает изучать?
>>2329957 Не понимаю, как писать. Нужно сравнивать каждый элемент с предыдущим, но я почему-то вылетаю за индексы + нужно сделать ветвление и возврат значения в лоб при совпадении
>>2330131 самое просто решение что приходит в голову -- сделать set и пихать в него инты. Если при очередном инте там число уже есть --- возвращаешь true
>>2330421 for _, result := range(arr) это из голанга же конструкция? Не помню. Просто воспользуйся ей, зачем писать циклы через for ;;;, а еще у тебя ошибка во втором цикле j должен быть равен i, а не 1. Ну и ходить "в холостую", когда тебе интересен только есть-нет результат, такое себе.
>>2330421 >Дан целочисленный массив nums, выведите на экран true, если хотя бы одно значение встречается в массиве как минимум дважды И еще задание перечитай, ты не правильно его понял, [ 1, 2, 1 ] - true, не обязательно они должны идти рядом.
>>2330421 чото ты нето понаписал тут. Судя по тому что я вижу --- твой алгоритм всегда будет говорить true, т.к. ты вторым лупом опять по всему nums'у (за исключением 0 элемента) проходишь
>>2328882 наивное решение это идти по массиву в лупе, внутри каждой итерации опять проходить по массиву и сравнивать текущий элемент с остальными ("остальной" - это если индекс внутреннего лупа не совпадает с внешним). более правильно пройти по массиву, собирая мапу элементов и их количества. если количество больше 1, то выйти с false. чисто технически можно собрать пройтись по лупу и собрать фильтр блума, потом пройтись по лупу и на каждый элемент-кандидат, на который луп отвечает "ну мб", делать фулскан как в первом случае например.
>>2330523 >>более правильно пройти по массиву, собирая мапу элементов и их количества Не всегда можно просто взять и [в худшем случае] умножить потребление памяти твоей программой на x > 2. Если массив большой, и его можно менять, то правильнее будет отсортировать, а дальше тривиально.
Аноны подскажите пожалуйста стыдно немного такие вопросы задавать, но я вот 1С-ник работаю в OZON программирую себе получаю денежку 23 лвл. Хочу перекатиться в GO за несколько месяцев прошел Go Tour и пункты Go Lerning продолжаю изучение, но чувствую что нехватает свободного времени сказывается. Думаю что чем раньше начну решать задачи от бизнеса тем быстрее руки выпрямиться и быстрее скилл прокачивать буду. Но пока чувствую, что знаний мало и пытаться перейти в другое направление засмеют. Так вот в какой момент мне будет не стыдно пытаться перейти в другую команду? Как мне понять, что уже можно хотя бы на стажера идти проситься? У меня же все есть опыт программирования на 1С ну это же хоть как-то должно тоже учитываться, что я чуть лучше стажера.
В общем какой-то сумбурный нервный поток мыслей надеюсь вы меня поняли
Сап, аноны, такой вопрос, самая высокая средняя зп у джунов именно в golang https://habr.com/ru/company/habr_career/blog/659343/ Вопрос: такую зп джунам платят, даже тем кто с нуля вкатился, за счет высокой востребованности? или те кто вкатываются обычно имеют опыт в других языках и за счет доп скиллов получают такую зп
почему так много либ для роутинга реквестов? Есть ли какой-то сакральный смысл в том, чтобы юзать дефолтный net/http, или же на gin +- тот же по производительности в плане хайлоада?
>>2332918 Собираюсь вкатиться в IT, опыта нет кроме школьного бейсика, матан и диффуры знаю, но технического образования нет Golang подойдет или лучше другой язык выбрать для начала? Интересен бэкенд и важна зп
>>2318134 1. Да, доставь пожалуйста моар инфы про зонд, и как его выпилить на этапе компиляции? Может, есть какие-то флаги? 2. По поводу исходников у зависимостей тоже не понял, как не скачиваются, они же нужны при сборке твоей программы, нет?
>>2332868 вкатился с нулевым опытом работы за 35к стажером. потом повысили до 65к. с 11 месяцами опыта перекатился на 100к в другую контору. потом повысили до 150к. с 23 месяцами опыта перекатился на 260к в другую контору.
>>2334538 Да его за 2-3 дня выучить можно. Еще месяц на самые распространенные либы. Месяц на несколько проектов и при условии, что ты пишешь на другом языке - ты примерный мидл
>>2334444 из москвы, вкатывался через один из двух маркетплейсов этой страны, о которых все слышали. >>2334538 го тур только прошел. пошел на собес чисто ради интереса, в вакухе было написано без опыта гошки, так что не старался изучить. я в целом мог себе какой-нибудь говноскрипт на петоне написать и простенький проект на сишке/плюсах поредактировать и чем where от having отличается знал, примерно так.
Я правильно понял, что на go особо проприетарный код не попишешь, чтобы никто не раскрыл содержимое? Потому что рантайм довольно внятные ошибки выдает, если они есть.
>>2336703 На Go вообще никакого кода, кроме серверного, не попишешь. Если ты увидел, что Go компилируется в исполняемые файлы, и провёл для себя аналогию с C++, то эта аналогия ошибочна. И тем более ошибочен вывод, что Go можно юзать для тех же задач, что и C++.
>>2336717 Мне надо написать небольшую программу, в которой надо выполнять пару десятков действий (функций) одновременно. Выбрал этот язык из-за горутин. Какой компилируемый язык посоветуешь, чтобы нельзя было посмотреть содержимое самой программы?
>>2336760 Слушай, ну твоя программа будет простая же, я её просто декомпильну и разберусь че там как. Что у тебя вообще за желание "нельзя заглянуть внутрь" было бы желание на самом деле. Вирусню и ту разбирают как нехуй спецы, а ты залетышь вообще, подумой. Без негатива если че
А вообще решил вкатиться в go для написания серверного приложения, так как на крестах всё это сложно и долго. Нашёл вот такой пример tcp клиента, но он крашится, если сервер недоступен. Как фиксить?
>>2347785 Он, видимо, ORM-фанатик, пришедший из какой-нибудь Джавы или Пыхи. На самом деле, положняк по орм такой: ORM придумали программисты, которые не хотели "заморачиваться" с sql-запросами. Подойдёт для "небольших" проектов (до нескольких тысяч пользователей.) С ORM проще, пока запросы простые. Если нужна оптимизация и хайлоад, пишем запросы руками. Вот и решайте.
>>2348202 >>2347821 Вы о чем вообще? ORM невозможно пользоваться в принципе, если не знаешь, как примерно такие же запросы, которые делает ORM, писать на голом SQL. ORM-макака без знания SQL это что-то из разряда невероятного, я такое даже вообразить не могу.
>>2348243 > Go невозможно пользоваться в принципе, если не знаешь, как примерно такие же команды, которые делает Go, писать на голом ассемблере. Go-макака без знания ассемблера это что-то из разряда невероятного, я такое даже вообразить не могу.
>>2348243 >ORM-макака без знания SQL это что-то из разряда невероятного, я такое даже вообразить не могу. хз, вполне себе представляю такого недо-прогера. Решил что "Ептыть, а нах мне этот ваш селект инсерт, ОРМ делает бррр бррр..." и всё
>>2347821 >>2348243 >>2348370 >>2348843 я конечно не настаиваю но во прос был по-моему в том, чтобы писать не тупа круд запросы, а фильтры, и в этом случае нужно как бы не внедрять инжекшоны и штобы это не плодило охуенно неподдерживаемый код
>>2348981 Так фильтры — это часть круда, всегда так было же. У тебя есть эндпоинт типа GetAllGovnoName и там нужна фильтрация, стандартная история. Есть куча способов запилить приличный API для фильтров без ОРМок (каким боком они вообще тут?). Естественно, и без всяких инъекций, если у тебя есть хоть одна извилина. На го это проще потому что строгая типизация.
>>2348870 Настают тяжёлые. Так что всем быстро учить сишку с асмом, я не шучу.
>>2349196 ну в зависимости от бизнес-требований это не "sql запросы", а 700 строк на генерацию одного запроса и собирание аргументов к нему по маленьким кусочкам и в какой-то момент это начинает внезапно ебать базу
>>2349368 >700 цифра из головы, или жизненные примеры есть? Ни одного такого большого запроса не видел. Да и элементарно, если бы ОРМки были быстрее и юзабельеней, то в вакансиях требовали бы их, а не знание SQL
>>2349483 из головы. в сумме там больше, но там три запроса в одной ручке и в каждом условия билдятся руками со всем соответствующим уровня часть форматстрингов начинается пробелами, а другая часть заканчивается.
Как в goland выключить удаление неиспользуемых переменных и импортируемых пакетов? А то пиздец, импортировал пакет, переключился на браузер, зашел обратно и вижу, что эта мразь удалила импорт!
>>2286748 (OP) Аноны, а почему в Го какая-то не понятная ебка с импортами? Будем пилить монолит по тиху и соответственно делать микросервисы на го, но тут я удивился, что НЕЛЬЗЯ ПРОСТО БЛЯТЬ ВЗЯТЬ И СДЕЛАТЬ ИМПОРТ, это вообще как? Почему я должен ебаться с какой то инициализацией модулей, я ни понимаю, нормальных гайдов как вот образно делать импорты как в питончике ? У всех в импортах какие-то репозитории, пакеты, бля, я просто хочу для начала иметь мейн откуда буду управлять остальными файлами, хоть как-то бля, но я в тупую не понимаю, можно по простому, для тупых, как работают в го импорты ?
>>2350549 >НЕЛЬЗЯ ПРОСТО БЛЯТЬ ВЗЯТЬ И СДЕЛАТЬ ИМПОРТ Философия golang - Data-Oriented programming, тебе дают минимум возможностей для выполнения операций с данными, привычный импорт это высоко-абстрактная фишка
>>2350738 В любом массиве (контейнере) в любом языке программирования. Можешь написать свою реализацию и расширять на 1, 2, n элементов каждый раз при добавлении нового, оптимальность этого решения будет зависеть от конкретного случая
>>2350738 >В каких языках есть подобные механизмы len, cap для слайсоподобных структур? Плюсы мб? По сути слайс = динамический массив. Я не шарю за внутренность динамических массивов в плюсах, но думаю что идеология похожая.
>>2352051 если передавать T вместо *T, то создавать объект через new не обязательно и можно просто объявить поинтер и анмаршал сам аллоцирует, если жсон корректный. https://go.dev/play/p/wvfj9O9TdfG
>>2351783 ну линекс апреори нужно ставить а так знание баша помогает спастись от ручного тестирования, когда ты можешь скриптом прогнать сотню разных запросов по двум версиям сервиса и сравнить их вывод. плюс на собесах могут спросить по деталям, т.к. сервера всё-таки на линексах. можно конечно на венде теорию дрочить но погружение все-равно лучше.
>>2351677 >Если ты действительно знаешь С++ Ну и что сложного в мире GO, что нужно обязательно байты дрочить 10 лет? В Гошку с нуля легко вкатываться.
Указатели? Гошка сама преобразовывает значение в указатель незаметно для программиста. Работа с памятью? Гошка эффективно удаляет неиспользуемый стек из памяти. Типы? Насмешил, в гошке очень-очень простая система типизации, автокастинг это супер, ошибки выдаются понятно и просто. Каналы? Ну каналы хз с чем сравнить. Горутины/каналы/многопоточность вот на что стоить уделить внимание, ящитаю
>>2351783 Английский язык и погружение в Linux это первое, что делает программист
>>2352222 >сама преобразовывает значение в указатель незаметно для программиста вообще пиздец, нахуй так делать, поначалу непонятно что происходит
Под "действительно знаешь С++" я подразумевал также знание алгоритмов и структур данных, которые были написаны челом на С++, ООП и работу с базовыми либами и памятью. Так что это просто хороший бекграунд для вката в го.
>>2352112 >>2352116 >>2352222 У меня просто ноут я уже наверное часов 20 убил на попытки поставить на него убунту но она просто намертво виснет не доходя до установки все советы перепробовал уже сил никаких нетю Сильно много я потеряю если останусь на винде?
>>2353132 Кстати вполне возможно флешка то старенькая. Спасибо анон сегодня схожу новую куплю надеюсь поможет. И еще вопрос какой Линукс лучше ставить? Убунты мне с головой для начала наверное хватит, да?
>>2353225 Как-то сложно. Нужно будет потом еще строку разбирать получается. А можно для этого использовать например http, или что другие используют? Я просто совсем ньюфаг в go. Хочу например из qt передать на сервер строку, число и массив булевых, как такое реализуется?
Пишу свой первый пет-проектик и появился вопрос. Вижу что часто используют паттерн репозиторий. И вроде все становится хорошо, до тех пор, пока данные не начинают взаимодействовать друг с другом. Приведу искусственный пример: пусть программе нужно хранить что-то связанное со странами и с городами. Для них заведены отдельные репы.
Если я хочу добавить новый город, то мне нужно сначала сходить в репу со странами, удостовериться, что там есть нужная страна, а после в репу с городами добавить город+его страну. Но если у меня под капотом какой нибудь постргес, то я бы мог просто для таблицы с городами указать страну как foreign key одним запросом добавлять город, получилось бы более консистентно и скорее всего производительнее. Однако тогда, на мой взгляд, логика растекается и не получается изолировать одну сущность в одном классе.
Расскажите, как в таких ситуациях поступают умные дяди
>>2353488 не еби мозги и не разделяй репозитории по сущностям, разделяй по агрегатам. я вообще не понимаю эту еботу с репозиториями на каждый чих. это какая-то ООП/клин код хуета. я обычно делаю одна БД = один репозиторий. вся более комплексная логика - обертка над ним. чтобы тестить зависимые пакеты вы можете интерфейсы и моки создать только с теми методами, что нужны. в чем я не прав?
Какие есть тесты с задачками на кишочки языка? Не просто теория, а с конкретными сниппетами кода? Ну типа тех тестов что по ЖС на learn.javascript.ru. "Tour of Go" не предлагать - это введение и оно мной пройдено.
Не. Не алгоритмические, а на тонкости языка. Типа хитро..банной лапши из промисов и setTimeout-ов на ЖС, на прототипы и т.д. То что спрашивают примерно на среднем голанг собесе. А литкод решается на любом языке.
>>2354363 Что-то не работает. Посылаю на сервер такую строку > "{\n \"CPU\": \"Intel\",\n \"Motherboard\": \"MSI\"\n}\n" На пиках код на сервере. Выдает пустые кавычки. На 3 пике вывод, если записывать в буфер.
>>2354987 К БД напрямую с клиента обращались в нулевых, тогда и серверную бизнес-логику писали на хранимых процедурах. Сейчас считается плохим тоном, типа плохо масштабируется. Но смотря что тебе нужно.
Думаю вкатиться в го, для начинающего норм вариант? В 24 года не поздно ещё? Линуксом интересуюсь, как-то давно проходил курс по питону со всякими базовыми алгоритмами, проблем не возникало, английский хорошо знаю, есть техническая вышка не айтишная. Привлекает тем что вроде бы вакансий немного, но и конкуренция меньше чем в том же фронте, более узкое направление. На крайняк рассматриваю QA.
>>2354987 по-хорошему между бд и юзером должна быть прослойка, чтобв не было робинов-брось-таблицу также это позволит писать отдкльные методы для отдельных обращений, мутя всё что нажо под капотом, за красивым методом апи
>>2355539 >gui на go Забудь >Думаю вкатиться в го, для начинающего норм вариант? Нет, пиздуй на питоне года 3 работать. На Го джунов в принципе не может быть.
35 лет. 12 лет пишу на пыхе и жс в одной конторе все это время. Хочу вкатиться в го. Перепишу некоторые части с пыха на го. Таким образом получу опыт коммерческой разработки на го. Реально так дорасти до мидла и найти работу?
Что почитать на тему взаимодействия клиента и сервера? Как наладить их взаимодействие? Вот есть десктопное приложение, мне слать запросы по tcp или по http на сервер, написанный на го?
>>2356751 >Что почитать на тему взаимодействия клиента и сервера? Википедию. >Как наладить их взаимодействие? По протоколу. >Вот есть десктопное приложение, мне слать запросы по tcp или по http на сервер, написанный на го? См. 2.
>>2286748 (OP) Боже блять... ну кто и нахуя придумал вот это? Сука, многое стерпеть в ГО могу, но это выше моих сил блять. Имел опыт с JS/TS, Питоном и Жавой - везде по-человечески отрабатывала обработка ошибок Как вы это жрете нахуй?
исключения убоги, усложняют понимание кода и замедляют его
ошибки как значения - шик и гарантия, что у тебя приложуха не упадет в рандомный момент времени, а все корректно обработается на правильном уровне
>>2357348 есть, но пропзал отвергли strconv.Atoi(str)? - делает return c дефолтными значениями и ошибками strconv.Atoi(str)! - паникует в случае ошибки
Утверждали что все функции в гохе принимают параметры по значению (при передаче в функцию происходит копирование), соответственно если ты хочешь чтоб они проходили по ссылке то передавай указатели.
Когда запускаем горутины через go - та же тема, но почему в случае каналов мы передаем сразу канал без всяких указателей, но работаем все равно с одним и тем же каналом, т.е. копирований не происходит?
ну то есть получается, go по сути как c++ только поумнее, удобнее и более зумерский? я просто щас учу его, хочу в бэк, но стажировки и работа на го это пиздец, надо знать нихуя себе сколько
>>2358542 Нужно, если ебёшься с высоконагруженными микросервисами, ты в любом языке для бэка будешь аналогично ебаться. А можешь писать на го круды и не столкнуться с этим никогда.
>>2358567 А теперь главный вопрос. Насколько в гошке популярны круды и фреймворки для веба? Чтобы раз-раз как в джанго\рельсах и готово? Какой процент вакансий? А ОЗОН?
>>2358608 хз, особой разницы такой не заметила, хотя всего то на джанго и ноде писала Просто разница возможно в скорости. Ну и еще за время изучения заметила, что от го так и веет мыслью мол "я дам тебе пизды, если будешь тратить память компа на не пойми что" наверно все же стоит продолжить изучение, язык только-только обороты набирает
>>2358612 >язык только-только обороты набирает Не знаю, по статистике падаю вакансии с марта очень быстро. В полтора раза уменьшилось за один только апрель. Джуном вкатиться нереально, но я бекендер тоже на ноде
https://ideone.com/09Jk5B вот бичевский метод расширения динамического массива, норм? или его лучше по-другому имплементить? И как его через дженерики для произвольного типа написать? interface{} нахуй
>>2358646 Тут есть рациональное зрено, но все не совсем так Пистон нужен в машобчике и датасоенсе. Но в беке его позиции слабы сейчас. Та же гошка стремительнее развивается
>>2358647 Вот, ты прямо телепат. Я именно со стороны "обычного" бекенда и пишу. В "обычном" бекенде без машоба\нейронки\дс там даже руби может потеснить
>>2358651 Последний раз была 40к на питоне. Потом свалил в ноде, сейчас 150к. На питоне сильнее ебали на собесах, вот и забросил. Сейчас думаю вернуться в питон (заново учиться) или в гошку вкатываться
>>2358654 Я редкий зверь, чистый бекенд на ноде. Ебать какое гавно я видел. После этого всё желание в JS/TS развиваться НЕТ. Не нравится, всё очень плохо. JS раковый и только для фронта сойдёт, на нём писать нельзя, даже TS не спасает. Это не тот инструмент для бекенда, я ошибся
Вся работа JS backend это пердолинг с самим языком и костыление. Всё хорошо на "пет-проектах" и на простых приложениях (которых не существует в бизнесе). Мне уже go нравится больше, но вкатываться рано, даже error handling не пугает
В гохе написал свою реализацию вот этого: https://go.dev/tour/concurrency/8 тут нужно через горутины параллельно обойти 2 бинарных дерева и сказать, идентичны они или нет. Обход это обыкновенный поиск в глубину, тут все ясно. Проблема именно с синхронизаций каналов.
В горутине я сбрасываю данные в один основной канал, в конце горутины делаю defer который отправляет с qCh (quitChannel) данные, это как бы должно сигнализировать о завершении одной из горутин, но блять именно на этом моменте возникает дедлок! (fatal error: all goroutines are asleep - deadlock!) Какого хуя?
>>2359141 >нужно указать именно вызов фуннкции лямду defer func(){ ch <- true}() туда вставь проста епта. по вопросу хз без кода непонятно ты может из канала один раз читаешь, а шлеш туда два раза
>>2358619 давай с уникальностью по компаниям. не то чтобы сильно поменяется, но без опыта могут одну вакуху на несколько команд поставить, а с опытом в конкретные.
1. err != nil это кусок залупы. Обрабатывайте наконец эксепшны как все Белые Люди. (и да, defer был высран именно по причине отсутствия try-finally) 2. Почему бы не запилить наконец нормальную итерацию по строкам? Сука, в этом говноязыке даже по строке не можешь нормально проитерироваться, т.к. итерируемся мы по байтам. Без сторонних либ и рюмки водяры не разобраться. 3. interface{} это не "мощная фича" это ебаный костыль, которому не место в статически типизируемом языке. 4. null pointer exception это самая частая причина вылетов в рантайме, го не только ничего с этим не делает, но и всячески поощряет их, утверждая что достаточно "просто каждый раз проверяться на nil" (вспоминает пункт 1)
>>2359302 >2. Почему бы не запилить наконец нормальную итерацию по строкам? Сука, в этом говноязыке даже по строке не можешь нормально проитерироваться, т.к. итерируемся мы по байтам. Без сторонних либ и рюмки водяры не разобраться. pic Или ты что-то другое имел в виду?
Привет, аноны, хочу вкатиться в голанг с нуля, но не шарю за то как бекенд устроен, посоветуйте ресурсы, на которых можно научиться вещам, необходимым помимо знания самого языка
>>2359489 Когда итерируешься по строке, ты итерируешься по байтам а не по символам. Можно при помощи либы strings итерироваться по рунам (символам) но вот если 1 символ у тебя будет 4 байта скажем то ты опять обосрешься. Что сложного сцуко было сделать по дефолту кодировку у всех строк utf8? Если нужны другие - преобразуешь при помощи той же либы encoding. От того они и строки блять. И завезти отдельный тип bytes (в общем почти как оно сейчас и есть, byte это шорткат для uint8), который интерпретировался бы как массив байтов. Вместо этого какое-то невнятное ковыряние байтов там, где оно нахуй не усралось.
Как установить пакет gorilla/mux? Ввожу команду > go get -u github.com/gorilla/mux Ругается, что надо использовать только в папке с mod, предлагает команду install. Окей, использую её, в итоге в $GOPATH/pkg/mod/github.com/gorilla появляется папка mux@1.8.0 А что с ней делать? В goland пакет все равно не видно. Почему так сложно всё? Пакет mysql я просто кинул в папку Program Files/go/src и заебись, везде подхватывается.
>>2360873 мб как-то так импортировать? я кнш новичек только, но похоже mysql пакет он ищет в пути goroot, а mux - в gopath (т.к. в goroot нет) второй вариант поменять gopath, а вообще да, удобнее go.mod юзать
Аноны, допустим на сервер поступает некий запрос, в качестве ответа мне надо переслать строки базы данных. Ладно если их пара штук, просто запихну в массив json и отошлю по http. А если их тысячи, десятки тысяч?
>>2362652 Двачую пагинацию. Но если ты ёбнутый, врубай chunked: ``` w.Header().Set("Transfer-Encoding", "chunked") w.Header().Set("X-Content-Type-Options", "nosniff") ``` После этого после каждого row дёргай `(w.(http.Flusher)).Flush()`. Соотвественно у тебя в ответе будет не один json, а стрим json-ов. К слову, на приёмнике, если он на go, не пересоздавай декодер, используй один для всего стрима - у него есть внутри буффер и ты будешь проёбывать данные иначе.
>>2359139 1. Не оставляй за собой висячих на канале горутин. В false-варианте обе твои Walk-горутины утекают. 2. Пушь значения в канал правильном порядке. Прочитай доку и код Tree 3. У тебя закрытие канала уже является сигналом конца обработки. quitChannel не нужен.
Теперь про дедлок. Деферы выполняются в обратном порядке. У тебя получается что обе Walk-горутины обработали деревья и теперь ждут пока кто-то прочитает quitChannel. Но Same-горутина в этот момент залочена и ждёт нового x, которого уже не будет. Варианты локально разрешить примерно следующие: 1. Поменять порядок деферов в Walk 2. Сделать каналу quitChannel буфер хотя бы в одно сообщение, но лучше в 2 (`make(chan bool, 2)`) 3. Выпилить quitChannel.
Один из вариантов решения - https://go.dev/play/p/HfdSANOkRvF Можно без stop-канала, если не нужна ленивость, тогда в if надо делать `res = res && false`
Теперь попробуй запилить то же самое для деревьев потенциально разных размеров.
>>2362652 ну зависит от контрактов и требований. можешь залить в хранилище и отдать ссылку и пусть хранилище ебется с этим вопросом. можешь тупа всё отдать, ты как будто никогда файлы больше 100мб с интернета не скачивал. текстовое можешь гзипом сжать, он в стриме кодируется/декодируется. у нас в сервисах да обычно пагинация.
>>2362797 Блин, внутри select и switch вообще говоря не нужен break, в отличие от множества других ЯПов, однако сцуко он там все же может быть и влияет на сам switch/select, поэтому когда запускаешь select через бесконечный цикл то break в нем не остановит цикл for, он подействует на select. Походу надо всегда из оборачивать в функции и выходить из нее через return
Как спать рандомное время? Вызов: time.Sleep(time.Duration(rand.Intn(2)) * time.Second) Отправит его поспать на либо 2, либо 1 либо 0 секунд. А как мне замутить равномерное распределение? Если внутрь time.Duration поместить вызов rand.Float64 то он автоматом округлит его до 0
>>2364282 Лул))0) А ты как собираешься делать break/continue из вложенного цикла? Булевские флаги заводить? Вот пример, имхо первый вариант-то получше будет. Тем более если вложенность 3+. Любой нормальный язык имеет похожую конструкцию, даже зумерские котлин и свифт.
>>2363959 А блять, в жс и пистоне привык что сразу передаю целиком float число и ниебет (какого хера кстати надо оборачивать вызов rand.Intn в time.Duration? Эта пизда говорит что якобы "invalid operation: rand.Intn(3) * time.Second (mismatched types int and time.Duration)" - как только меняю rand на обычный int все компилится и запускается)
>>2364556 Потому что литерал не int, его тип подбирается под место в котором литерал написан.
https://go.dev/ref/spec#Constants An untyped constant has a default type which is the type to which the constant is implicitly converted in contexts where a typed value is required, for instance, in a short variable declaration such as i := 0 where there is no explicit type. The default type of an untyped constant is bool, rune, int, float64, complex128 or string respectively, depending on whether it is a boolean, rune, integer, floating-point, complex, or string constant.
>>2364282 Метки в go не самостоятельны, они обязательно привязаны к какому-то выражению. Но вообще go это не более чем сиговнецо с горутинами, каналами и сборкой мусора. >>2363898 Компу-то похуй, а серверу в контейнере с ресурсами старого айфона не похуй.
Приветствую смотрящих. У вкатунов, которые решили начать с goвна, нет ощущения, что вас кто-то жидко наебал? Потому что у меня есть, блять. Второй год хуярю проекты для портфолио, а на меня до сих пор никто даже не смотрит. Я просто в шоке, блять. На hh порядка сотни откликов, которые привели к двум собесам, на которых было "будешь работать 40 часов за 5к в месяц?" (рублей, не грина). Это ебучая дыра, нахуй я полез в этого синего хорька, бляяяяяяяяяяяяяяяяяяять. Мог бы, как нормальные челы, хуярить ручки на джанге или спринге и горя не знать, но нет же, блять МАНЯСЕРВИСЫ, ГРПЦ ЭХО СЕРВЕР НА ЧИСТОЙ АРХИТЕКРУРЕ, руками сру в голый tcp, чтобы чел на фронте мог написать ws.onmessage(). Хуета, блять
А че, в гохе не принято в целом в разных горутинах работать с одним общим объектом (массивом, мапой или структурой)? Например бегаю я по матрице nxn в разных горутинах и если элемент равен определенному числу то записывают индекс ячейки в общий массив result
result := [][]int{}
Метод append же блять не мутирует а возвращает новый массив. Даже если указали ебнуть, все равно на выходе у меня получается пустой массив result. Походу в гохе на таких задачах только через каналы работают, да?
>>2364698 Задача вообще даунская - дана матрица nхn: matrix [n][n]string Вывести все индексы в формате {строка, столбец} элементы которых равны заданному target
Можно пройти все через вложенные циклы for, но очевидно что в гохе такое лучше делает через горутины - ебануть n горутин которые бегают по разным строкам и получить конечный результат
>>2364698 Принято, с этим проблем нет. Не понял, как именно ты пытаешься наполнять result. Скинь код что ли. Если очень надо передать слайс в функцию и там в него что-то записать, то можно как на пике сделать, но вообще так не делают обычно.
>>2364698 >Даже если указали ебнуть, все равно на выходе у меня получается пустой массив result так ты не присваиваеш результат исходному слайсу, а наверняка новую переменную создаешь. у тебя на выходе должен быть слайс с неопределенным числом элементов, а не пустой. без канала тебе как вариант нужно сразу слайс с N=n_горутин элементов сделать и каждой горутине сообщить индекс в который она пишет.
>>2364615 here, probably, on every post about the vkat, they write that the juns are not fucking needed. you need to roll into the goshka like this: - you learn pluses/peton/chart/javu - looking for vakuhi in this language - you notice a vacuum in the goshka - you go to social services for goshka, specifying that you learned another language я короче пост выделил и уменя гугл транслейт выскачил ну короче сорян
>устроился на новую работу >куча задач по "продукт должен Х", "если Y, заказ должен Х" как вы с этим живете? я привык жсоны перекидывать между сервисами/бд, а не этой продуктовой хуйней заниматься, которая для ебанов с 1С/сишартом/жавой.
>>2364615 ну хзхз, вот прямо ваннаби после курсов условные никого не интересуют особо.
а вот если производил деятельность разработочки по шаблонам проектирования на %framework_name%, имеешь в целом хорошие хардскиллы, возможно разрабатывал что-то гибридное Django x Golang - тогда вы действительно что-то представляющий из себя кадр, и будут готовы рассмотреть кандидата даже если про гошку увидел первый раз в вакансии, но в целом обучаем.
Но вкатуны почти вообще не особо, как в начале написал. Полгодика назад может было и да, но сейчас компании максимально сокращают расходы и не распыляются на инвестиции в стажеров как раньше. Интересуют только хардскилловые ребята с которыми не нужно будет возиться и тратить время на раскачку.
>>2365768 Скастить бизнесовые требования в ТЗ - задача аналитиков и продакта. Провалидировать успешность такого каста - задача продакта, лида и тебя. Если скастилось хуёво, то рекомендую отнести задачу обратно лиду. Если тебя сагитируют побыть аналитиком, смело увеличивай сроки выполнения задачи в 1.5 раза. Если задача связано с регуляторкой - в 2 раза минимум, также перед реализацией надо будет провалидировать самописное ТЗ об кого-нибудь, ибо времени переделывать такие задачи как правило нет.
>>2359302 > Обрабатывайте наконец эксепшны как все Белые Люди Белые люди давно перешли на Result и Optional. Если надо защититься от долбоёбов - есть recover. > defer был высран именно по причине отсутствия try-finally defer - это минимальная реализация scope(exit). По смыслу он больше похож на cleanup-аттрибут в gcc. > Почему бы не запилить наконец нормальную итерацию по строкам? По строке можно итерироваться через индексы или через range. Через индексы ты итерируешься по байтам, через range - по символам. > interface{} это не "мощная фича" это ебаный костыль, которому не место в статически типизируемом языке Стирание типов вполне себе фича статически типизированных языков. > npe это самая частая причина вылетов в рантайме Львиная доля которых - пропуск проверки err. Как и в других компилируемых языках, не хочешь npe - не используй nullable-тип или пиши тесты/фазз-тесты.
Помогите с запросами к бд. Есть массив string, надо из таблицы получить строки, в которых колонка соответствует какому либо элементу из списка. это я сделал И при этом надо выдавать строки порционно. То есть например первые 5 строк, потом с 6 по 10 и тд. Пагинация короче говоря. Можно конечно сначала получить все строки, и потом уже взять нужный диапазон, но это как-то неэффективно.
Анончики, подскажите, можно ли у http.Server вносить изменения в роутер на горячую? То есть после ListenAndServe() менять хэндлеры без остановки и перезапуска? Если да, то как реализовать?
>>2367436 блин, ну чет хз. Тут mux"ы предопределены. Мне же нужно при наступлении определенного события сформировать новый хендлер их контекста события и подменить им старый.
>>2367596 поинтер подменяй или в мапу засунь или слайс, есть же динамические структуры данных. то что я написал легко можно представить в виде
s := http.Server{Handler: http.HandlerFunc(func(rw http.ResponseWriter, r *http.Request) { ________realHandler := getHandler() ________realHandler(rw, w) ____}) }
>>2367602 когда ты записал h в хендлер её значение скопировалось в структ сервера и что ты там потом пишешь в h ему вообще похуй. во-вторых это датарейс.
Аноны объясните что я делаю не так Пик 1 делаю POST запихиваю свой json получаю ответ. Пик 2 мои туги сделать тоже самое на Go Только от postman я получаю нормальный ответ 200 А в Go я иду нахуй
Аноны нужен ещё совет нужна библиотека которая конвертит xml в docs и xml в pdf Весь интернет перерыл везде только создание по шагам типо addTitle addString addPic, а такого чтоб xml с тегами втолкнул и заработало нигде не нашёл. Если просто текст затолкать он все теги как текст и вывидет, что и логично Может я искать не умею или тупой и чего-то не понимаю. Помогите
>>2369517 >а тредов не должно быть больше, чем ядер Шо?) Хочешь в Питоне создам 100 тредов вообще изи? Или в Пхп fpm заспавнит 100 тредов на 100 коннектов
Нормально добавлять в динамический массив данные вот так или везде нужно хуярить через append и переприсваивать напрямую этот массив, т.к. в гохе порешали что "мутации это плохо"?
>>2369495 >преимущество рантайм Го сам их приостанавливает и запускает по необходимости. + удобная фича в виде каналов. Почитай про шедулер Гошки, довольно интересно кмк.
>>2369661 Ничего го не перезаписывает. Если есть запас capacity у слайса, добавляет. Если нет, выделяет память и пишет новые значения туда. Можно сразу брать капасити с запасом
>>2370100 нужно поебаться и навести мышку на замечания линтера и прочитать что а) в неэкспортируемые переменные ничего не заанмаршалится б) теги для полей пишутся не так
>>2370159 Ну чел, у тебя в json'е массив лежит, а ты хочешь вытащить какую-то пару значений. Тебе массив вытаскивать надо, примерно таким же образом делается, просто стракт еще один сделай, где поле типа []Hueta будет.
>>2370163 Кста, не ебу, является ли твой массив в json'е является верхнеуровневым или болтается как поле в виде "hueta": [...], во втором случае надо будет делать var huetaSlice []Hueta и анмашларить в него
А почему у нас дедлок когда мы отправляем в канал который никто не читает? Думал просто кинули данные в канал и пошли дальше не блокируясь, ведь по идее это должна быть не забота отправителя данных, а забота получателя
>>2369973 >мне НУЖНО писать на языке Х как будто я пишу на языке Y Ну да, а хули нет? Я не обязан подстраиваться как чмоня под любого хипстера, флюродросящего "новыми" концепциями, пусть под меня подстраиваются
>>2370523 Канал != очередь, у него другое назначение. Можно сделать его буферизированным и тогда сколько-то можно будет накидать не читая, но потом все равно залочится.
>>2370532 ну тогда ответ: зависит от компании. если там все такие залетные с синдромом утенка из других языков или готовые жить с "Я не обязан подстраиваться как чмоня под любого хипстера, флюродросящего "новыми" концепциями, пусть под меня подстраиваются" , то норм. если нет, то на ревью киберунизят.
>>2370523 для неблокирующей отправки без гарантии отправки есть синтаксис через select. если тебе бесконечный буфер нужен, то пиши свой канал, один хуй это обертка над массивом по сути.
Я кайфанул от goland а траил уже закончил русскому подписку продавать отказываются если я в профеле поставлю Юкрейн смогу оплатить чперез пейпалл например? Какие еще варианты?
>>2370532 Знавал я человека который на любом языке писал нечитаемую императивную дрисню. Чел был охуенно полезным, но его код без него заморозили и переписали с нуля.
Так вот, если твоя ценность только в том чтобы код писать, то гошка не для тебя. Она как и раст, пиздит гребца когда он пишет код не как принято, только пиздит в рантайме и от того больнее.
>>2371348 Ну не знаю, меня рантайм пиздит, только когда увлекся возвращением nil вместо ошибки (и забыл проверить на него) и при кривой конкурентности. Базово все работает предсказуемо, потому что язык примитивный по дизайну
>>2371346 VSCODE у меня в голове прочно связан с фронтендом и моими потугами в JS а меня от js блевать тянет и на изнанку выворачивает поэтому vs code мне опротивел
Как из высокоуровнеего пайтона вкатиться в го? Прочитал A Tour of Go и многое выклядит совсем нелогичным и даже сложным. Реквестирую материалы для перекатывальщиков из питона, где объясняют что и зачем. На питоне уже 4 года пишу, считаю свой уровень выше среднего. Кроме него только жаес знаю.
>>2371768 Первое что бросается в глаза после питона: всё строго типизированно листы/слайсы перемудрённые концепт поинтеров классов нет, надо делать методы к объектам struct
Сорри, с нелогичным погорячился. Я понимаю что эти "сложности" связаны с тем что программе надо скомпилироваться и с памятью работать поумнее интерпритатора. Просто мне пока сложно представить как, например, поинтеры использовать. А написание классов совсем кривым кажется по сравнению с питоном.
>>2371780 >всё строго типизированно И это прекрасно. Явно приводишь к нужному типу, если это нужно. После Питона непривычно, но со временем понимаешь всю прелесть >листы/слайсы перемудрённые Про статические массивы можешь забыть. Практически не используются. К слайсам привыкаешь достаточно быстро, там все элементарно >концепт поинтеров Тут тоже все относительно просто. Нужно изменить конкретный объект - передаешь в функцию по ссылке (поинтер). Нужно просто передать значение - передаешь копию примитива (обычная переменная). Ну и слайсы с мапами передаются по ссылке by design. >классов нет А есть принципиальная разница? Какую суперфичу приобретает структура, если назвать ее классом? По факту отличается лишь специфическим наследованием через "встраивание".
Просто не сравнивай, это разные инструменты, разные парадигмы, свои особенности. Это как изучать жс афтер пайтон, там event, dom, spaghetti и вообще подход отличается.
>>2371959 Спасибо что разъяснил, попробую пересилить себя.
>А есть принципиальная разница? Какую суперфичу приобретает структура, если назвать ее классом? По факту отличается лишь специфическим наследованием через "встраивание". Наследование у классов очень удобное, а ещё питоновские классы можно учить превращаться в dict/list и прочие структуры с помощью дескрипторов.
>>2371980 >А смысл перекатываться, проблемы с работой тоже? Я девопс, мне что-то кроме питона не сильно нужно. Хочу вкатиться для собственного развития, у меня тонна проектов написанных на питоне. Было бы очень круто их переписать на что нибудь компилируемое и быстрое. Да и девопсить надоесть может, перекачусь в девелопера.
>>2372136 >Наследование у классов Хорошее наследование это когда его немного. Встраивания и интерфейсов вполне достаточно. >превращаться в dict/list ну в статической типизации как бы и не принято, что бы что-то неявно превращалось. Пиши метод, проблем нет.
Как бы в этом и прикол, что кода приходится писать больше, но компилятор дает определенные гарантии корректной работы.
Дебажить Питон это больно. На Го я частенько пишу код часа 2, затем запускаю его и все работает сходу
>>2372150 Для меня долго дебажатся логические ошибки, а не синтактические. Такое не отловишь на уровне компилятора, тут тестировать надо. Думаю в го тоже самое будет. Хорошо что у меня куплен пак IDEх от жетбрейнсов, уже запилил себе goland.
>>2286748 (OP) Недавно попустили на моем первом собесе на гоху. Задали вопрос: - В чем преимущество сервера на горутинах перед сервером на обычных тредах? Например на php Я ответил: - Ну горутины более легковесные - Это-то понятно. Но все же, в чем преимущество?
Блять, я даже и не знал что на такое ответить. Естественно правильный ответ они так и не назвали.
>>2372760 ну рассказал бы в чем преимущество ты че. легковесность это такое себе, ты же их не мешками на себе таскаешь. От тебя наверняка ждали рассказать про сисколы, контекст свищинг, размер стака у ос тредов и такое
>>2372915 Еще был такой вопрос: "мы запустили миллион горутин, в каждой из них мы слипаемся на 100 секунд, какие ресурсы и в каком объеме будут затрачены? усложнится ли сборка мусора? насколько?"
>>2373325 Мидл. У меня опыта полгода на Ноде и 2 года на Питоне. Но меня пиздец ебали сначала по кишочкам GC и мой ответ про "конкурентную сборку мусора и 3 цвета объектов" их не устроил, хотели глубже. Еще были всякие интересные вопросы про то что представляет собой структура горутины или подробное описание операции битового сдвига на АЛУ (!) Кароч, меня 1.5 часа гоняли по внутренностям гохи, не получил ни одного вопроса по базам данных или вебу в целом.
Когда мы юзаем append то всегда создается новый слайс? append не мутирует а возвращает новый объект, значит ли это что несмотря на то что capacity слайса не превышено все равно будет создан новый слайс?
>>2374147 А тут есть что-то сложное? Или Питон настолько психику травмирует? Ни для кого не секрет, что на Го чуть больше кода писать приходится. Но вместе с этим есть и куча преимуществ
>>2373891 Не буду пожалуй пока говорить, чтоб не деанониться на всякий. Это одна из крупных рашн фирм, не ожидал что меня настолько попустям там, такое ощущение что они сеньку искали.
>>2373574 Какая-то хуйня, я проходил собесы в кучу контор от Авито (6 ебучих собесов, рекорд!) и Яндекса до Тинькоффа и Гетта и нигде настолько глубоко не докапывались. Ну или ты привираешь.
Про сборку мусора не нужно знать про цвета объектов, надо знать в общих чертах как это работает, и как это отображается на коде, классический вопрос с runtime.Gosched и всё такое.
BTW посоны а где чего интересного можно почитать про types2 и прочие изменения внутри го из 1.18? Я что-то ленюсь прям по коду го разбираться, хочется почитать обзоры про мономорфизм и вот это всё. Generics the hard way я читал и изучения глубины вопроса не оценил.
>>2373823 В смысле? Мы заюзали append и он возвращает новый объект. То есть старый остался, мы его скопировали и засунули туда еще одно значение. Если arr в них обоих указывают на один и тот же массив, то блэт исходный должен был измениться, но это нихуя не так. Не понимаю бля, в чем смысл возни с capacity если мы в любом случае целиком копируем слайс в случае append/
>>2375387 > Не понимаю бля, в чем смысл возни с capacity если мы в любом случае целиком копируем слайс в случае append/ Потому что он копируется не всегда, а только, если вместимость старого массива оказывается превышена. 1) У тебя был массив размером 4 и вместимостью 4: [a, b, c, d] 2) Ты добавил туда новый элемент "e" 3) Тебе под этот слайс был выделен новый массив с удвоенной вместимостью 8, а размер массива теперь 5: [a,b,c,d,e].
Это чтобы если ты скажем в цикле аппендишь массив, не перевыделять память каждый раз, она выделяется с запасом.
>>2375418 Реальный юзкейз: func IntsToStrings(arg []int) []string { ss := make([]string, 0, len(arg)) // размер 0, вместимость равна вместимости arg, то есть мы однократно выделили память под массив строк без перевыделения промежуточных массивов for _, x := range arg { ss = append(ss, fmt.Sprintf("%d", x)) // и просто добавляем значения аппендом } return ss }
>>2375387 >исходный должен был измениться, но это нихуя не так. ты ожидаешь что у исходного длина поменяется? заресайзь его до капасити и увидишь, что если аппенд не привел к реаллокации, то после старой длины лежит новый элемент.
проверяется вообще максимально просто без еботы с капасити. a := []int{1,2,3} _ = append(a[:0], 4) fmt.Println(a)
Я к вам с заебавшим вопросом по поводу джуна. Смотрю сейчас рынок и немного плачу и унываю, понимая что вакансий нет. Может кто объяснить что мне делать кроме как сосать хуй. У меня опыта в программировании лет 8, но я не разу не работал программистом, не спрашивайте как так получилось. Есть пара проектов на го на гитхабе. Имеет ли какой-то смысл ждать go джуна вакансию или вкатываться в питон/ноду? И что в данном случае будет востребованней питон или нода?
>>2375782 Ты мне скажи пож-ста. Можно ли приравнивать опыт работы скажем в год, к паре проектов на го, одним из которым мы с корешами пользуемся почти каждый день? Я могу примерно подтянуть себя по требованиям к мидлу. Есть еще леткод и кодварс, и вообще я задачки решать люблю. Но боюсь, что если напизжу то просто не потяну реальные задачи.
>>2375791 Очевидно что пиздеть лучше правдоподобно, не стоит сообщать о якобы 8 годах опыта работы, если по факту нет нихуя, лучше сказать что 2 года прогал на питоне/пхп/жс на беке и последние полгода на ГО, чистых гошников практически нет
>>2375800 Только в каждом выдуманном проекте ты должен заранее придумать чем лично ТЫ занимался и что это был за проект. Это всегда первые вопросы на собесе, если не можешь внятно описать что ты делал на прошлых местах,, это будет выглядеть очень подозрительно
Как принято работать с defer и recover? В каждой высокоуровневой функции своего пакета ставить recover чтобы не ловить ошибок в рантайме и возвращать ошибку из функции напрямую это норм идея?
>>2377012 А куда wg wait поставить? У меня стоит в самом конце проги, чтобы дождаться всех файлов. И что значит "прокинуть j в горутину"? Типа как аргумент передать анонимной функции?
>>2377016 > А куда wg wait поставить? У меня стоит в самом конце проги, чтобы дождаться всех файлов. Хорошо. > И что значит "прокинуть j в горутину"? Типа как аргумент передать анонимной функции? Да. У тебя же не блочится цикл. Цикл бежит быстрее, чем выполняется горутянка. j инкрементируется и используется в горутине не с тем значением, с которым ты ожидаешь (гонка же. В твоем коде возьмется последний индекс, наверное).
>>2377017 >А еще лови ошибку от ioutil.ReadAll Ловлю (пик 1)
>А еще чекни статус у response на 200. Она обрабатывается в другом месте
>>2377021 Это я понимаю, но не понимаю как реализовать, range же сам по себе инкрементируешь счетчик, а если я делаю цикл через j < len(Files), то он какого-то хуя больше чем нужно увеличивает счетчик и в итоге получается out of range. Я пробовал через atomic.AddInt и sync.Mutex, всё равно, но мб я еблан и чето не то делал
>Посмотри на html/template >А еще ты скорее всего хотел continue вместо break Да, лол
>>2377029 > >А еще лови ошибку от ioutil.ReadAll > Ловлю (пик 1) На пике 3 у тебя ошибка летит из http.Get. В дальнейшем приучись ловить ошибки где только можно. Ненужные отбрасывай. Заиспользуй потом github.com/pkg/errors. Позволяет стектрейсы собирать.
> Это я понимаю, но не понимаю как реализовать, range же сам по себе инкрементируешь счетчик, а если я делаю цикл через j < len(Files), то он какого-то хуя больше чем нужно увеличивает счетчик и в итоге получается out of range. У тебя мб files чистится до исполнения горутины. Передавай тогда в аргументы сразу строки, которые используешь. > Я пробовал через atomic.AddInt и sync.Mutex, всё равно, но мб я еблан и чето не то делал https://goplay.space/#qCG2BrQ0F0F https://goplay.space/#ZMfaA0X-Erq
>>2377021 >Да. У тебя же не блочится цикл. Цикл бежит быстрее, чем выполняется горутянка. j инкрементируется и используется в горутине не с тем значением, с которым ты ожидаешь (гонка же. В твоем коде возьмется последний индекс, наверное). там j := j
>>2376402 дефер для отлова паник ставят редко, чтобы не загаживать код. все равно все хуй отловишь, поэтому обычно там в мейне и в какой-нибудь мидлваре хттп роутера. в других местах обычно добавляют после того как уже упали, а баг не нашли и вот решили закостылить.
>>2377111 это не скрытая логика, а распространенный паттерн в замену более вербозного создания горутины с аргументами. стейтмент находится в том же скопе, что горутина, а не хз где. я намного реже вижу горутины-лямды с аргументами и каждый раз обращаю внимание на них.
>>2377530 Там вся работа и проходил, сплошная угадайка. Заказчик пишет хуйню, ты ему в ответ манярасчёты, он тебе в ответ пишет, в чём ты не прав, и так до финального "согласовано, делайте".
>>2377529 >выводим причину из следствия чел... тебя перепроверить попросили, а не вычислить то, что тривиально выводится из перечисленных данных. для проверки все равно нужно сравнить полученные тобой 4050МБ с исходным суммарным размером. это в каком-то классе учат или с образованием всё так плохо?
Accept interface, return struct Как это использовать в методах хендлера/юзкейса/репозитория? Создавать для каждой структуры геттеры полей? А если структура с дохуищей полей?
>>2380262 > Это правда что Жава пукает тредом на каждый новый реквест? Нет, жаба берёт свободный тред из заранее созданного пула тредов, он и обрабатывает запрос. Если свободных тредов нет, ждёт, пока появится, но ждать надо мало. > А Гоха пукает горутиной? Да. > В чем плюс гохи тогда? Можно срать не снимая свитер.
>>2380264 >берёт свободный тред из заранее созданного пула тредов Но нахера? Создание треда - довольно дешевая операция. Почему бы не создавать их динамически?
>>2380383 "Некоторые машины" - это большинство, причём минимум 1МБ. Ла, по сравнению с горутинами, которые можно спавнить тысячами, это охуеть как много.
Пришел к вам за советом, вкратце опишу ситуацию. Работаю уже как год и несколько месяцев на позиции инженером по нагрузочному тестированию, по многим причинам уже успел заебаться в следствии чего в начале апреля решил вкатиться в разработку выбрав язык go.
Прошу направить в нужную сторону и/или дать советов, насколько это реально, какие подводные есть. Правильно ли что делаю акцент на проектах в гитхабе или многим похую.
Сообщение может показаться сумбурным, но могу побольше рассказать о своем опыте и знаниях.
>>2380610 >по многим причинам уже успел заебаться пили сториз >Прошу направить в нужную сторону и/или дать советов, насколько это реально, какие подводные есть. Правильно ли что делаю акцент на проектах в гитхабе или многим похую. хз. у тебя шансов больше чем у хуя который вкатывается с нуля. на гитхаб будет на 100% похуй, если ты будешь валиться на самом собесе. а для нормальной зепки скорее нужен опыт+удачный собес+предложение от соперника, а не гитхаб с нерабочими интернет-магазинами.
>>2380625 >пили сториз Моя позиция особо востребована в банках из чего вытекает следующее Самая большая проблема это крайне сильная бюрократия с цепями и миской риса. Вот пример, чтобы отладить скрипты мне приходиться подключаться к виртуальному пк через рдп а уже с него к другому пк. Обязанности распределены по ебанутому. Я как-то девопса просил скинуть конфиги постгреса и я ждал сука 3 ДНЯ БЛЯТЬ, хотя это делается в ОДНУ команду. Когда подключаешься через впн к внутренней сети банка тебе обрубают выход в интернет из-за чего приходиться писать бат костыли чтобы вернуть выход -_- И конечно же перекидывание ответственности с одной команды на другую, я заебался за сегодня искать команду которая могла бы написать ебучие экспортеры на опеншифт и постгрес
>>2380264 > Нет, жаба берёт свободный тред из заранее созданного пула тредов, он и обрабатывает запрос. Если свободных тредов нет, ждёт, пока появится, но ждать надо мало. Так жаба говно получается? Значит её бессмысленно вертикально масштабировать. Надо горизонтально?
>>2380621 ООП это не про наследование, совершенно необязательная его часть, которую нормальные люди как раз делают через композицию. Наследование это антипаттерн.
Солид это вообще маняфантазии из разряда "за все хорошее против всего плохого".
>>2381428 > совершенно необязательная его часть Для всё не обязательная часть, определим ООП как "возможность создавать структуры и передавать их в процедуры", и ООП будет хоть в ассемблере. Нет, нихуя так не работает, ООП либо есть, и оно как в крестах и жабах, либо его нет, и точка.
>>2381445 ООП ради ООП? И именно такого как в Джаве/Плюсах? Или лучше все таки взять лучшие практики, а говно типа множественного наследования выкинуть нахер?
Если нужно как в Джаве - пиши на Джаве. Но это не значит, что раз не как в Джаве, то уже не ООП
>>2381445 А если серьезно, база ООП - это полиморфизм. И его вполне достаточно для соблюдения твоего любимого СОЛИДа. Инкапсуляция? Питон клал на инкапсуляцию и что теперь? Не ОО?
Какую уникальную возможность дает наследование так и не понятно. И чем хуже композиция? Вопрос не раскрыт
>>2381472 Да почему не ООП то? Третий раз интересуюсь. В чистой архитектуре нормально раскладывается, что является ядром ООП, а что второстепенно. Вполне конструктивно
>>2381855 Некорректно объянил, но в общем понятие ООП не имеет значения, слишком абстрактное понятие, языки могут не являться ООП, но на них можно писать в ООП стиле. Хуету придумали, а долбоебы зафорсили.
привет, онаннисты. Как думаете, Го хороший язык для вката? Говорят, он довольно просто и что важно для меня - быстр (какие-то тесты показали что скорость уровня C++) Но я понять не могу, что на нем можно сделать? Все-таки хотелось бы вкатываться с портфолио каким-нибудь
>>2382068 >учится за неделю Я так уже "выучил" его за неделю, что был попущен на первом же собесе. Это несмотря на то что у меня опыта почти 3 года на беке
>>2382057 >какие-то тесты показали что скорость уровня C++ Какие? Какие-то. >что на нем можно сделать? Микропенис, а потом еще один, а потом еще один, ..., а потом еще один, а потом тулзу для управления этими микропенисами.
Мне тут в cpp треде кое кто рассказал, что в расте у вас охуенная система сборки, что все очень просто подключается, чуть ли не одной командой компилируется под все ОС. Это правда? Если да, то опишите кратко, пожалуйста, за счет чего это было достигнуто и почему в тех же плюсах этого нет пока я твердо уверен, что у вас это не так работает, как мне описали
>>2382326 Ну если сравнивать с плюсами то да, система сборки это просто майндконтролл какой-то. Компилировать просто, зависимостями управлять просто, есть флаги компиляции под разные архитектуры. В плюсах этого нет, скорее всего потому что ему уже 40 лет, и деды-ебланы очень неохотно внедряют современные всеми привычные вещи в язык.
>>2382773 Для дронов вряд ли. Там все таки реалтайм нужен. Для IoT - бля, мои мысли изложил. Только пидрилы из Tiny Go который год не могут запилить поддержку Wifi для ESP32. Если дождемся - заживем.
>>2383174 продолжение И еще кстати не понимаю, почему МашОб"ом то так все плохо. Избавляемся от Питоновской лапши и скорости, сохраняя простату. Не ловим UB с плюсами. Не жизнь, а сказка.
Что имеем: кучу каких-то наколеночных решений для 1.5 задач и Горгонию для пацанов, закончивших MIT. Где мой Fit/Predict блять?
Вообще с библиотеками беда. 90% - 5-10К звезд, при этом разрабатывались три года назад какими-то ноунеймами.
Обидно, что такой замечательный язык так обделяют. Я бы вообще все на Го переписал.
>>2383197 >Избавляемся от Питоновской лапши Орнул как представил, что заместо простого и понятного вызова вроде np.cross прогер хуярит простыню самописной хуеты
заебали со своей чистой архитектурой пидоры. нахуй вы делаете 10 практически одинаковых объектов с дублирующимся кодом в десятке ебануто названных микропакетах, когда можно просто 10 методов у объекта сделать? пидарасы ебаные просто.
>>2385393 Забить хуй. И делать как считаешь целесообразным. Посмотри топовые проекты, там везде по разному. То что какой-то хуй с горы написал что это golang standarts ничего не значи. А он реально хуй с горы, которому лишь бы директорий наплодить
>>2385393 Вот например, в корне три директории. build, scripts, tools - нахуя три директории, которые решают одну и ту же задачу. При этом Makefile у этого уникума лежит в корневом каталоге. Директория vendor добро пожаловать в 2007. web, website.
Я знаю, что всех тут уже заебал этот вопрос, но всё же: а в чем суть поинтера на интерфейс, и почему в функцию, принимающую поинтер нельзя пихнуть экземпляр стракта, который имплементит интерфейс? Ну реально, если переменная типа интерфейс это пара из поинтера на данные и поинтера на первый элемент списка (или массива - я не ебу) методов, схуяли мы в рантайме не можем осознать, что это таки не сам интерфейс и перед проверкой типа сначала получить реальное значение? Мб это как-то связано с оптимизацией пустого интерфейса?
>>2385451 а кто сказал что есть суть? кидай код. я вижу только возможность присвоить интерфейсу другое значение, полностью аналогичную интам и другой поинтер на хуйню хуйне. в живом коде от людей с экспириенсом не вижу подобной хуйни. >>2385393 вообще похуй. у нас все мейны в cmd идут и я тоже так делал как вкатился. мейн в руте на второй работке видел, в принципе тоже норм. всякие тулзы там кроме главного бинарника в cmd кидал и вроде всем норм было. а вот всё остальное что можно придумать я бы сказал не норм. плюс ты ссылку ебаной кобры привел. это бля в принципе довольно специфичная хуйня для консольных утилит, которые построены именно на кобре. у сервисов в продакшене обычно нихуя "команд" нет и кобра нахуй не нужна. я бы даже сказал, что нормальным людям достаточно flag, потому что вы просто ебанутые если накидываете дохуя логики в флаги, заведите конфиг бля или сделайте по-нормальном.
>>2286748 (OP) Обязательно ли ставить лок на мапу (или юзать sync.Map) если мы знаем что запись новых значений в нее будет идти лишь 1 раз по каждому ключу? (спросили вчера на собесе, правильный ответ так и не сообщили)
>>2383197 Ты же понимаешь, что приличная доля питоновских машоб-вызовов требовательных к cpu это на самом деле cpp с питоновской обвязкой? или не понимаешь?
>>2386186 Хз, попробуй взять обычную и параллельно из нее почитать. Думаю что работать будет, но -race будет ругаться. Ну и мантра про то, что надо думать на будущее и в последствии кто-то захочет писать в нее еще. Вообще хз, может кто поопытней ответит.
>>2386457 Если race ругается, значит там есть проблема. По поводу изначального вопроса, короткий ответ: нет, так как запись в мапу не атомарна и там под капотом может происходить много вещей от просто записи в бакет до перевыделения памяти под всю мапу.
>>2383197 Я неиронично думаю, что один из основных ништяков питона это его динамическая структура, это во-первых позволяет на лету эвалить какие-то участки кода, чуть ли не выделяя их мышкой, пробовать всякое не дожидаясь компиляции и так далее. Во вторых, питон динамический, что позволяет не думать о типах и писать говнокод, ту самую лапшу, которая конечно говно, но что ты ожидаешь от MLщиков? Они никогда не были про хороший код. Соответственно, чем меньше они думают о коде, тем лучше, говнокод писать быстрее и им не нужно ничего учить лишний раз. Я бы уж тогда предложил им JS, который хоть и говно, так хотя бы быстрое, под капотом у V8 пиздец сколько оптимизаций.
>>2386519 Но при этом есть класс спецов, работа которых заключается в переписывании питоновской лапши под С++ с оптимизациями под ГПУ и процессор, получающих на уровне ДС"ов, а то и больше.
Если для крупных компаний это приемлемо, то для небольших компаний/стартапов было бы выгоднее взять специалиста, который сможет запилить несложные модельки на Го, при этом не наговнокодить и сразу запустить в прод.
С другой стороны вроде как Горгония может в ONNX, так что ситуация становится проще, но тем не менее, так и остается маргинальщиной.
Хотя настоящая причина моего негодования в том, что я хочу поиграться в МЛ, но от Питона начинает тошнить
>>2386519 >на лету эвалить какие-то участки кода Не думаю, что ДСы таким занимаются. По крайней мере ни разу не видел. >позволяет не думать о типах Опять же, разве в ДС нужно что-то кроме матриц флоатов и комплексных чисел?
Аноны, возникла такая задача. Функция может быть вызвана из множества горутин. При этом нужно, что бы выполнение началось только при первом вызове, а запросы пришедшие во время выполнения первого вызова игнорировались (или вызывающий был уведомлен о том, что функция уже выполняется). Как это почище реализовать? была мысль с RWMutex и булевым значением типа такого:
func (s struct) () { s.mu.RLock() isrunning = s.isRunning // bool s.mu.RUnlock if isrunning { ____return "already running" }
Аноны, возникла такая задача. Функция может быть вызвана из множества горутин. При этом нужно, что бы выполнение началось только при первом вызове, а запросы пришедшие во время выполнения первого вызова игнорировались (или вызывающий был уведомлен о том, что функция уже выполняется). Как это почище реализовать? была мысль с RWMutex и булевым значением типа такого:
func (s struct) () { s.mu.RLock() isrunning = s.isRunning // bool s.mu.RUnlock if isrunning { ____return "already running" }
>>2386607 Ну если это основная структура пакета, что в начале. Вспомогательные в месте использования. В отдельных файлах как-то не приходится. Если это не DTOшка какая-нибудь
>>2386607 ага. файлик structures.go там рядом файлик interfaces.go еще рядом functions.go еще рядом methods.go еще рядом constants.go еще рядом variables.go
>>2380262 >Жава пукает тредом на каждый новый реквест Если брать обычный спринг с обычным Tomcat сервером, то в целом да, там был тредпул, и оттуда брался свободный тред. Еще есть webflux на netty, там все асинхронное, никакого жесткого долблебния в тредпулы нет.
Сейчас осенью выйдет JDK19, где уже будет Loom. С осени на жабе можно будет пукать виртуальными потоками точно так же, как это сейчас в го делают.
>>2375757 Есть же стажировки в яндексе, озоне и вайлдберисе. Наверное еще и в авито есть. Озон и вб сейчас должны расширяться, так как параллельный импорт набирает обороты + ушли с рынка всякие торговцы шмотками и мебелью и еще кучи всякого другого
>>2364615 В го вкатуны не нужны толком. Если не осилил войти в какой-нибудь помойный вайлдбериз стажером, то лучше забей и ищи работу где-нибудь в других стеках, в той же пыхе мб что-нибудь и найдешь (гошка плюсом будет возможно). Вообще сейчас на гошу переходить особо никто не будет, так как это деньги и время, а сейчас времена очень жидкие и неспокойные. Вкладывать хуй пойми сколько миллионов в переписывание легаси параши с пхп на го желающих сильно поубавилось.
Аноны, можете посоветовать где улучшить навыки параллельного программирования? Есть какие-то упражнения или классное видео, которое классно объясняет как это все работает.
>>2387736 >улучшить навыки параллельного программирования Классных видео или упражнений, чтобы легко, просто и без задней мысли прокачать concurrency попросту нет.
Читай талмуды пикрил, а также всевозможные статьи по теме моделей памяти, атомиков + всякие прикольные штуки по типу Software transactional memory, structured concurrency, и т. д., для этого возможно придется погрузиться в разнообразные пропозалы или даже научные статьи на arxiv.org.
В общем, если все это осилишь, то наверное что-нибудь и поймешь в многопоточке и конкарренси, я тебе гарантирую.
Насколько я понял, реализовать мой случай можно таким образом: 1) Добавляем в структуру поле *sync.Once 2) При вызове функции ----выполняем функцию через once.Do(Fn), параллельные вызовы блокируются ----В конце успешного вызова функции делаем once := new(sync.Once), чтобы по окончании можно было вызвать ее снова в будущем.
>>2388251 И ты таким образом переносишь гонку в `once := new(sync.Once)`. Мьютексы это норм решение и тебе нужно просто +- изящно структурировать код. Советую тебе сначала проверять isRunning атомиком, а потом просто открывать мьютекс и фигачить. Примерно так: https://goplay.space/#txO7srv9M2F
>>2388251 >once := new(sync.Once) ага, теперь незобудь once мутексом оградить. если тебе нужно снова вызывать её после завершения, то ты по всей видимости mutex.TryLock из 1.18 хочешь. но если ты его хочешь, то ты что-то неправильно делаешь.
>>2388346 Кстати интересный код, спасибо большое. Атомик как-то не трогал пока да и страшновато. >>2388407 Но вот этот вопрос остается открыт. Т.е. new(once) происходит в функции запущенной под предыдущим once.Do(), соответственно вызывается один раз и гонку не создает
>>2388407 >>2388412 Теоретически должно сработать, но воспринимается если честно как хак, перевыделять память под once внутри его же коллбека, такое не очень принято и мб не очень оптимально, в отличие от просто атомика / мьютекса. Хотя конечно экономия на спичках в данном случае.
Аноны, спасибо большое за советы, в итоге получилось так. Возможно накосячил в английском, но работает как надо
func (s *PServer) Update() error { ____if !atomic.CompareAndSwapUint32(&s.updatingNow, 0, 1) { ________// updatingNow != 0: Update() already called at the moment ________// so no need to call it again until the first call completes: this call will be ignored ________return nil ____} ____// Else: updatingNow == 0: There are no other goroutines that execute Update function now.
____// After Update function's end PServer.updatingNow is set 0 (false), ____// so the next Update() call will be executed ____defer atomic.StoreUint32(&s.updatingNow, 0)
...собственно выполнение самой функции... ____return nil }
>>2390092 Нормальные это хелловорды на WPF с приминением паттернов, ведь сразу нормально сделать было нельзя, и вообще любим это легаси говно тащить за собой в .NET Core.
Кстати, что с неймингом?
Не забудь про ключевые слова readonly, fixed, ref и разные контексты их использования. С другой стороны LINQ.
Microsoft превратила свой язык в какие-то питоно-кресты: с одной стороны куча нюансов, ансейф код - с другой ванлайнеры с линком и его охуенной производительностью.
Доброго времени суток аноны гоферы, пишу вам за советом. Подскажите пожалуйста, вот я шлю запрос в БД и у меня в таблице есть столбец с NOT UNIQUE. И когда я специально шлю запрос с дублирующим полем, программа выкидывает ошибку и и выход из выполнения. Вот какой способ можете порекомендовать чтобы программа из выполнения не выходила, пробовал ошибку обработать но что-то не получается. P.S. Да, я понимаю что вопрос может показаться пиздец таки тупым но хотел с пообщаться с опытными гоферами.
>Если поле NOT UNIQUE - это значит, что повторяющиеся значения могут быть. Имелось ввиду просто UNIQUE? Да, опечатался, имел ввиду что есть столбцы с UNIQUE ограничением.
>А что за ошибка то? Паника или ты сам принтишь ошибку, которую возвращает функция? Для логирования использую библиотеку логрус Вот ошибка с консоли: {"level":"fatal","msg":"pq: duplicate key value violates unique constraint \"book_book_title_key\"","time":"2022-06-28T16:26:01+06:00"}
exit status 1
И я походу понял в чем проблема, короче решил я поменять логрус на стандартную библиотеку лог. 1. Шлю запрос с дублирующими данными 2. В консоли получаю ошибку и программа дальше выполняется 3. А логрус выкидывает exit status 1 и выходит из выполнения
Если я перепишу на стандартную библиотеку log, мне кажется что это будет считаться костылем и не решенной проблемой, как думаешь?
Епты бля че для логирования использовать? Вот есть такая хуйня как на пике, но это же пиздос такое делать, потому что это каждый раз нужно файл открыть, записать лог и закрыть. Мб есть фреймворки годные?
>>2391242 Если очень хочется все таки в коде файл открывать, вызываешь log.SetOutput(w io.Writer), куда передаешь открытый файл и не трогаешь его пока программа не завершит работу.
Аноны насколько хорошая идея создавать сеты для работы с повторяющимися файлами? Например у меня есть 20 картинок, которые можно сравнивать по размеру и объему. Уникальная картинка добавляется в сет и дубликаты просто на неё ссылаются. И есть ли в go кастомные сеты из структур, чтобы не писать одинаковые для каждой структуры?
Понятно, что можно их отсортировать по весу и потом сделать какой-то более быстрый поиск, это все опустим
>>2391169 1) Стандартный логгер это говнище, которое не умеет примерно нихуя и кстати это один из стандартных вопросов на собесах, недостатки стандартного логгера; 2) Вообще говоря, os.Exit вообще мерзкая функция, особенно если вызывать её не в main, поэтому вызов её в внутри внешней библиотеки это моветон; 3) Но тут авторы логрус не виноваты, потому что стандартный гошный логгер ведет себя так же, тоже сразу завершает всё при фатале. Смирись и просто запомни, что с легкой руки пидорасов, которые писали стандартный логгер (вот только хуже сделали, ей богу), в гошном мире теперь принято так; 4) Но при этом вообще говоря фатал никто не использует иначе, как выругаться об ошибке и сразу всё завершить, в продакшен коде ты скорее всего log.Fatal не увидишь; 5) Сам по себе os.exit кстати та ещё срань, потому что не вызывает уже зарегистрированные defer'ы.
Посоветуйте хорошие проекты на Гитхабе, на которых можно поучиться best practice по: 1) Тестированию 2) Логированию 3) Взаимодействию с БД
Собственно в чем проблема. Большая часть популярных проектов - библиотеки либо тулинг, соответственно смотришь только на куцые юнит тесты функций. О логировании и БД речи вообще не идет. Либо какие-то project-example, где тривиальная логика, а взаимодействие с БД ограничевается CRUD методами на одну таблицу.
Есть что-нибудь с +- продвинутой бизнес логикой, работой с БД, и прочими ништяками, при этом сделанных по уму.
В книгах тоже, к сожалению, вижу только бесконечные примеры в package main, которые к реальному проекту имеют весьма посредственное отношение и показывают только то как дергать нужные функции, при этом не понятно, как встраивать это в архитектуру приложения.
>>2392113 К сожалению таких нет, тем более что многие гошники вообще про организацию когда никогда не слышали.
я всё хочу написать какой-нибудь пример сам, но руки не доходят. Рекомендую почитать про ddd, гексагональную и слоистую архитектуру, что-то для себя поймешь.
У меня структура обычно выглядит так /cmd - тут консольные команды типа run, migrate и так далее /internal/domain/entity - структуры сущностей и интерфейсы репозиториев /internal/domain/service - сервисы из предметной области /internal/app/scenario - сценарии ака юзкейзы ака операции, скажем "регистрация юзера" /internal/app/service - специфичные сервисы именно для слоя приложения /internal/infra/postgres - реализации репозиториев, в гексагональной архитектуре это секондари адаптеры /internal/infra/grpc - реализации сервера, в гексагональной архитектуре это примари адаптеры
Получается так, что /cmd поднимает приложение, внутри него поднимается реализация сервера /internal/infra/grpc Этот grpc сервер внутри себя при получении внешнего запроса вызывает конкретный сценарий из слоя сценариев приложения. Сам сценарий внутри себя оперирует сущностями, интерфейсами репозиториев и сервисами из доменной области, которая domain. Реализации репозиториев лежат к примеру в /internal/infra/postgres
В итоге получается такая цепочка Клиент вызывает grpc register_user -> grpc register_user вызывает сценарий "регистрация юзера" -> сценарий берет репозиторий Users и вызывает метод Create -> ответ возвращается в обратной последовательности.
Но у меня серьезное приложение, большой домен, много адаптеров, grpc, http, кафка, несколько бд, кеши и так далее, так что мы серьезно вложились в структурирование кода.
>>2392188 >/internal/domain/entity >/internal/domain/service >/internal/app/scenario >/internal/app/service "как сделать много папочек и не сказать путем ровно ничего для чайников"
>>2392188 Спасибо за ответ. Достаточно полезно с точки зрения архитектуры приложения, хотя мне бы посмотреть уровнем ниже, как это все организуется в коде. Как писать модульные/интеграционные тесты и тест-кейсы. Как именовать функции интерфейсов репозиториев и подобное.
>>2392770 Я бы с радостью заопенсорсил свой код, но у меня крупная закрытая контора финтех и такого конечно никогда не будет.
Давай попробую просто поотвечать на твои вопросы, немного псевдокодом.
> Как писать модульные/интеграционные тесты и тест-кейсы
Самое главное, разбить код на сценарии, чтобы понимать, что ты тестируешь. Далее берешь testify, и заводишь по сьюиту на сценарий, примерно так выходит:
type SuiteRegisterUser struct { users entity.Users client http.Client }
func (s SuiteRegisterUser) BeforeTest(_, _ string) { // делаешь инжекты в s, создаешь репозитории, поднимаешь сервер или мок-сервер если надо и всё такое s.client = http.NewClient() s.users = postgres.NewUsersRepo() }
И соответственно начинаешь описывать различные кейсы конкретного сценария:
func (s SuiteRegisterUser) TestAlreadyExists() { // подготовка данных, если необходимо const email = "blabla@gmail.com" ctx := context.Background() s.Require.NoError(s.users.Create(ctx, &entity.User{Email: email}))
// проверяешь результаты сценария, если вдруг нужно s.Require().Error(err, "err_already_exists") // в другом примере можно было бы найти юзера, чтобы убедиться, что он создался }
Это пример полнофункционального юнит теста, при котором ожидается, что он поднимет сервер, законнектится к базе и проверит весь код в максимально боевых условиях. Конечно разные люди делают по разному, есть подходы, когда мокают базу, сервер и тд и тп. Тут у тебя может возникнуть очевидный вопрос, как поднимать базу, если поднимать, я пробовал testcontainers и мне не понравилось, в итоге остановился на том, что в докере поднимаю прям постгрес (или локально или в пайплайне) и через переменные окружения прокидываю доступы в сам тест: TEST_DB_NAME=blabla go test ./...
> Как именовать функции интерфейсов репозиториев и подобное.
Интерфейсы репозиториев лежат в доменном слое, потому что это по сути набор операций над бизнес сущностями. Тут есть тонкости, модель может быть анемичной или rich, тебе придется прочитать про это отдельно, потому что люди делают по разному в зависимости от потребностей.
package entity
type User struct { ID string Email string CreatedAt, UpdatedAt time.Time }
var ( ErrAlreadyExists error )
type Users interface { Create(ctx context.Context, user User) error // can return ErrAlreadyExists Update(ctx context.Context, user User) error FindByEmail(ctx context.Context, email string) (User, error) }
И уже внутри internal/infra/postgres реализация интерфейса:
Как-то так. Внутри репозитория можно хардкодить запросы, собирать их с помощью билдера и тд, разных подходов много, я тут написал самый тривиальный псевдокодный вариант. Весь прикол в том, чтобы отделить специфику реализации от самих операций над сущностью, с помощью интерфейса. Чтобы у тебе в бизнес-коде не появилось внезапно бд-специфичного кода.
>>2393160 привет анон! подскажи пожалуйста, вопрос не по теме будет, а в чем разница между мидлтварями сервисами, репозиторий я понял, эта та сущность которя с бд работает, а в чем разница между ними то обеими, так то получается они логику сервиса обрабатывают не?
>>2393173 Не совсем понял вопрос, в чём разница между миддлварями и сервисами? Или между сервисами и репозиториями?
Первые два - это совсем разные вещи. Middleware это просто прикладной паттерн, который говорит о том, что бывают "прослойки" с полезной нагрузкой для каких-нибудь вызовов. Получается что-то очень схожее с декораторами. А сервисы это некие отдельные логические единицы, относящиеся к теме моделирования предметной области.
Так, нет, давай зайдём с другого конца. Когда ты пишешь какой-то серьезный софт, то ты действуешь в терминах предметной области, скажем, магазина. Это означает, что вообще в бизнесе существуют такие вещи как "заказ", "доставка", "покупатель" и тд и тп, это история даже не про код, это часть реального мира. И ты для решения каких-то бизнес задач (скажем, интернет магазина), эту предметную область моделируешь. Если ты слышал когда-нибудь термин "модель", то скорее всего её кто-нибудь безграмотно употреблял в смысле "штука, которая хранится в базе" или "модель бд". А на самом деле весь твой интернет магазин - это некая модель бизнес процессов, как у физиков, когда они вулкан моделируют какой-нибудь к примеру.
Соответственно, у тебя есть какой-то юзкейз ака сценарий, скажем, "оплата заказа" и тебе нужно его выразить его средствами твоей модели. Тут мы придём к анемичным или богатым моделям, про которые я советовал почитать выше.
Если модель богатая, тогда у тебя всё должно быть выражено напрямую через сущности. Что-то вроде такого: function ScenarioInstantPurchase(user, product, payment) { cart := user.GetCart() cart.AddProduct(product) order := cart.CreateOrder() order.AddPayment(payment) order.CalculateDelivery() // ... и тд }
Это очень прикольно, и академически правильно, но так делать очень сложно по многим причинам. Поэтому люди часто переходят к анемичной модели, когда сами сущности хранят в себе только данные, а логика работы с ними выносится в отдельные сущности, ака сервисы:
function (s *Scenario) ScenarioInstantPurchase(user, product, payment) { cart := s.cart.AddProduct(cart, product) order := s.orders.CreateFromCart(cart) s.payments.CreateForOrder(payment, order) s.delivery.Calculate(order) // ... и тд }
и здесь уже репозитории и сервисы похожи, иногда до степени смешения, на код выше посмотришь и не поймешь, что такое cart - это сервис или репозиторий?
В целом я обычно, когда использую анемичную модель, яаще всего стараюсь держать репозитории максимально простыми и максимально ближе к данным, а в сервисы выношу какие-то куски прям явной бизнес логики, какие-нибудь рантайм вычисления доставки, алгоритмы и тд и тп. Советую смотреть на это так, что пакет domain это такой фреймворк для сборки бизнес процессов, в нём есть сущности (entity), хранилища для непосредственных операций над сущностями (разнообразные круды и селекты) - это репозитории и сервисы, хранящие в себе прям логику.
И из этих кубиков ты в слое приложения (app) собираешь сценарии ака юзкейзы. Которые потом будешь вызывать откуда тебе там надо, из сети, консоли, интерфейса, тд
>>2393317 > Советую смотреть на это так, что пакет domain это такой фреймворк для сборки бизнес процессов, в нём есть сущности (entity), хранилища для непосредственных операций над сущностями (разнообразные круды и селекты) - это репозитории и сервисы, хранящие в себе прям логику. В смысле три разные вещи: 1) сущности - описывают объекты 2) репозитории - напрямую чёто делают с объектами 3) сервисы - какие-то логические штуки, вычисляторы, организаторы, тд
>>2393317 Спасибо тебе большое за такой развернутый ответ!
Такой ещё вопрос (был бы рад если и другие опытные гоферы подскажут) пишу свой CRUD сервис с 8-10 ендпоинтами, БД постгрес, авторизация и регистрация присутствует (JWT токен использую), все изменения в гитхаб пушу стабильно. Тянет ли это на сильного джуна? Сейчас работаю тестером нагрузочником бекенд сервисов в одном из банков в рф (зеленый если что), вот думаю перекатиться в разработку на гошке
Я не опытный гофер (и не этот анон>>2393317), просто вонаби гофер, даже не из ИТ. В общем погружаюсь уже около 2 лет, первый из которых страдал херней на питоне и Сях, а последний сижу за Го, к сожалению не занимаюсь каждый день, из за чего растянул процесс вката пиздец.
Так вот. Недавно услышал такой совет: "просто и без задней мысли начинаешь искать работу". И вообще забить на все, потому что учиться можно бесконечно. Исходя из того, что ты написал, я бы начинал искать работу прям сейчас. Еще и прошлый опыт +- пересекается.
>>2393448 пчел спасибо за поддержку, но ты наверное и сам знаешь как трудно найти работу на гофера, мой единственный выход это пилить пет проекты. Ты удивишься но мой опыт где я больше года занимаюсь НТ и успел ещё полгода АТ позаниматься, вообще ни в пизду ни в красную армию оказалось в контескте вакансии на гофера. Так что как-то так оказалось....
Почему бы и нет? Главное помнить, что пет проект - это всего лишь пет проект, это хорошо, но ещё не всё. Вывод, что ты "сильный джун" будет делать чел, который тебя собеседует. И да, разница между сильным джуном и миддлом довольно невелика и вероятно в основном в величине зп :D
С моей точки зрения грейды различаются так: 1 стажер вообще ничего не знает 2 джун что-то знает и что-то умеет, но как это применить - нет 3 миддл стабильно и правильно делает задачу по техническому описанию 4 сеньор и сам себе техническую задачу напишет, от бизнеса ему нужен только кивок в нужную сторону
Соответственно тут скорее вопрос к тому, что ты знаешь и умеешь, а твой проект на гитхабе - это просто способ увеличить свои шансы попасть на интервью или пройти его, если он написан хорошо, конечно.
Кстати вообще не факт, что тебе нужен jwt или что ты его правильно используешь. Просто к слову, если ты юзаешь что-то, будь готов ответить, почему ты это используешь и чем оно лучше другого.
Такой вопрос. Пишу обновляемый хендлер. В текущем виде с моими маня-тестами работает как надо. Возникает вопрос, при высоких RPS есть вероятность, что функция Update будет долго ждать, пока не прекратятся вызовы ServeHTTP?
Если да, то можно ли в таком случае запускать вложенный ServeHTTP в отдельной горутине (пометил жирным)? Сохранится ли "копия" хендлера для активных вызовов (пришедших до запроса на Update, но еще не отработавших) или ее изменение в структуре вызовет сатану?
type UpdHandler struct { ____mu sync.RWMutex ____h http.Handler }
>>2393513 в моем маня-представлении это будет учебный проект для маслят которые хотят вкатиться в нагрузочное тестирование. Так как начинающим НТшникам нечего тестировать. Если тем же условным мануал куа можно любой сайт открыть и протестить то с НТшниками посложнее, нагружаемый сервис может подумать что это дудос и забаних нахой айпишник маслёнка НТшника. А так как сервисы на архитектуре рест самые популярные в бекенде, то им достаточно будет развернуть мой проект на той же виртуалке и потестить написав скрипты на jmeter, loadrunner, k6 и т.д.
>>2393582 Хз, зачем кому-то так заморачиваться. Хочешь что-то нагрузочно протестить - делаешь `docker run -p 3000:80 ealen/echo-server` и вперед. Ну или nginx в докере поднять, со специфичными конфигами.
Так-то объект тестирования внутри вообще не должен быть ни гибким, ни как-то особо написанным. Просто какой-то тупой http сервер с каким-то профилем нагрузки. Максимум
go run server.go
где server.go это
func main() { http.HandleFunc("/hello", func (w http.ResponseWriter, req *http.Request) { // ну тут можно ещё в базу стукнуться или семафор на 100 одновременных запросов поднять для тестов. fmt.Fprintf(w, "hello\n") }) http.ListenAndServe(":8080", nil) }
В-общем, если ты делаешь пет проект как тестировщик, не программируй, а делай штуку для тестирования, максимум пользы, минимум излишеств. Не нужно тут ничего самому программировать, просто предоставить людям заглушку для тестов. А если ты делаешь пет проект как программист, то тогда это не должно быть учебным пособием для тестировшиков, а должен быть некий близкий к реальности программный продукт, который покажет твои навыки писать, собственно, программные продукты. Сделай, не знаю, тот же интернет магазин к примеру, бложек, туду лист, куча вариантов. Я в качестве своего первого пет проекта лет уже почти 10 назад сделал копию музыки вконтакте, сервис, в который можно было заливать файлики с музыкой и потом слушать их онлайн ^_^
> If a goroutine holds a RWMutex for reading and another goroutine might call Lock, no goroutine should expect to be able to acquire a read lock until the initial read lock is released.
>>2393793 бля оч круто звучит слушай. я тебя понял, просто моя основная идея была в том чтобы написать сервис который был бы близок к реальному продукту, чтобы как ты сказал прокачать навыки программирования а уже потом только пришла в голову предложить стажерам качать навыки НТ на нем. Но все же спасибо за такой развернутый ответ :)
>>2393557 тебе обновление хендлера нужно блочить во время выполнения? просто делаешь RLock h := uh rUnlock h.ServeHTTP а твоя штука с горутиной наверняка будет неожиданно работать, если где-то ожидается, что servehttp блочит на время выполнения.
>>2393897 >а твоя штука с горутиной наверняка будет неожиданно работать, если где-то ожидается, что servehttp блочит на время выполнения. как пример мидлвары которые после servehttp что-то делают например длительность измеряют.
>>2393897 В идеале обновлять одновременно с выполнением. Что бы запросы направленные до запроса обновления корректно завершились.
>твой вариант http.Handler это же интерфейс и мы просто скопируем ссылку на функцию. И после RUnlock ее свободно могут изменить -> в h.ServeHTTP будет гонка. Разве не так?
>>2393806 Вот как раз таки из-за этого и боюсь, что вызов Апдейта будет отложен на неопределенное время. Или Lock встает в своего рода очередь и последующие запросы на RLock будут выполнены после лока на запись?
>>2393892 А что такое migrate? Таких пакетов десятки. Пока вслепую вангану, что должно быть `migrate -ext sql create -dir db/migrations -seq create_users_table` либо `--ext`. А вообще читай доку конкретного пакета и/или его гитхаб.
>>2394030 >http.Handler это же интерфейс и мы просто скопируем ссылку на функцию. И после RUnlock ее свободно могут изменить -> в h.ServeHTTP будет гонка. Разве не так? поинтер могут изменить, но это не меняет значение на которое этот поинтер указывал. с интерфейсом должно всё быть аналогично.
>>2394260 жсономешалки. всякие микро серверсы для бек енда, реже системные и плат форменные утилиты уровня NIH ансиблов, интеграции с девайсами уровня "есть драйвер для сканера/кассы, нужно предоставить к ним синхронную/асинхронную апишку" что по сути тот же бекенд
>>2394059 Эта штука делает миграции и накатывает их, я конечно не особо понимаю зачем, ведь sql я и так руками написал, я чисто из документации копировал этот код и он сука не работает, у людей в ютубе даже работает.
Я вообще думаю отказаться от этих утилит, по сути, что она автоматизирует? Ничего, Только файлы создает
Давай начнём с того, что есть несколько паттернов работы с базой и для начала нужно определиться, какой у тебя и правильно подобрать под него тулчейн. 1) Код-first, он же orm'ный, когда ты сначала описываешь сущности в коде, а потом некий (возможно самописный, возможно либа типа gorm, не к ночи будь помянут) код маппит их в базу. Соответственно, этот же код может накатывать и/или создавать миграции. У того же gorm (только умоляю не начни его юзать, это порождение Сатаны, а не либа) есть метод AutoMigrate, который сам увидит новые поля у сущностей и сам их накатит. Более правильный вариант, это конечно прям генерировать миграции и накатывать их отдельно; 2) DB-first, когда ты руками пишешь миграции и вообще модифицируешь базу данных, а потом некий код маппит данные их базы в код. Например, как sqlboiler, который генерирует гошные структуры по схеме бд (этот пакет в целом годный, я юзал); 3) Смешанный, когда ты руками описываешь структуру бд, руками описываешь гошные сущности, а потом настраиваешь маппер между ними. Самый гибкий, но и самый требовательный к прямоте рук.
Но при всех этих 3 подходах, у тебя как правило есть задача "накатить миграции", то есть, посмотреть, что уже было накачено, накатить недостающее, если не получилось на катить - то откатиться назад к предыдущей точке. Какие-то миграции могут быть кодовые, какие-то чисто sql, какие-то должны выполняться внутри транзакции, а какие-то нет. Ты мне до сих я же блять прямо спросил не сказал, что за пакет ты юзаешь, пока что я вангану что это https://github.com/golang-migrate/migrate и он делает именно это, хранит в базе таблицу с уже накатанными миграциями и умет апгрейдить/даунгрейдить состояние системы до нужной точки. Это можно написать самому, но внешний пакет здесь нормальная тема, потому что этот код в целом одинаковый во всех проектах.
tldr: создавать файлики это не главное, главная задача - это "накатки и откатки миграций", с разными опциями. Иногда её решают ормки, иначе, есть смысл использовать внешние тулзы для таких дел.
>>2394260 Несколько специфических областей: 1) Блокчейн и крипта. 2) Кубернетес и прочие девопс штуки; 3) Написание бекендов в компаниях среднего и большого размера, как правило "микросервисов", хотя я бы не обращал внимания на этот баззворд, в 99% случае люди не вполне понимают, что говорят. Кажется, что наибольшая доля го в финтехе, и традиционном и всяких модных необанках. Но при этом крупные конторы часто юзают, в РФ - те же Авито, Яндекс (яндекс.еда вроде), mail.ru, 2gis. Единственное, надо понимать, что у пехапешников, js'ников и джавистов есть вариант устроится джуном в какую-нибудь мелкую контору, местячковый аутсорс за еду и там за год набраться какого-никакого опыта. С го такое скорее всего не проканает, аутсорса на го почти нет, вакансий больше в крупняке.
>>2394414 У меня третий подход, ОРМ мне противно использовать, да, его, и он именно не работает, хотя по пути нарастания сложности мне удалось добиться от него генерацию JS файлов, но это мб другой какой-то пакет? Посоветуй альтернативу этому пакету
Я ж именно пониманием этого всего дошел, а не от балды хыхыхы че зачем
>>2394414 Вообще, спасибо за такой развернутый ответ, видать этот пакет migrate походу фигово работает на макоси у меня, просто не заводится и все, может есть приемлемая альтернатива? Не хочу генерировать го, хватит sql , мигрирую постгресс базу,
Вообще, мне б для тупых объяснить вообще как эти миграции работают в плане отката-наката, ведь речь о обновлении базы, иногда нужно прописывать у поля что-то вроде default="1234", бо иначе не заведется, или возникнет конфликт какой, хз, думаю приколов там достаточно
Могу я вообще понимать миграции как что-то типа гита для баз данных?
>>2394582 Не понял про default и конфликты, у тебя там явно какая-то лажа происходит. И уж тем более не понял, причём тут JS.
Если не нравится migrate, ну используй goose, в целом, одна фигня.
Миграция - это грубо говоря операция изменения структуры бд. В серьезных проектах у тебя есть код, который зависит от структуры бд, поэтому тебе нужно при релизе кода, который скажем начинает работать с этой таблицей, эту таблицу создать. Отдаленное сходство с гитом наверное есть, не знаю, сложно сравнивать. Ты же можешь посмотреть прям по коду, что этот тул делает. Грубо говоря, ты создаешь файлики: 001_create_table_users.sql 002_add_admin_user.sql 003_add_users_email_fields.sql
И тогда у тебя база может быть в 4 состояниях, 000 - где ничего нет, 001 - где отработала только первая миграця и тп. И migrate просто по очереди накатывает недостающие миграции. Проверяет, что накатить, а что нет он просто - заводит ещё одну таблицу, в которой хранит инфу, что он уже накатил, а что нет. В goose эта таблица так и называется, goose_db_version, по-моему.
>>2394659 Я кстати вообще не люблю использовать migrate отдельным тулзом, больше нравится в cmd отдельный эндпоинт для наката миграций юзать. Тот же goose можно и как либу использовать.
>>2394662 у нас всё это делается при раскатке автоматом. разработчики тупо файлики в папке создают, так что необходимость ручного вызова миграций кроме как для отладки от меня начала ускользать вообще. а для отладки я могу шаг тупо на базе прогнать.
>>2394665 Я про другое. Не нужно в систему ставить отдельный тул, у тебя есть общий бинарник, например `go build -o users` И соответственно `users serve` поднимает сервер, а `users migrate` накатывает миграции. Как их накатывать, руками или нет - вопрос десятый я вот пре-хуком helm'а это делаю. Вопрос в том, нужно ли отдельно на сервер ставить ну или в докере запускать, один хрен внешняя штука goose и делать goose migrate или нет. Мой ответ: не нужно.
>>2394692 по моему мнению, учить сервис накатывать миграции и захламлять код, и тем более иметь ручку для этого - не нужно. накат миграции можно реализовать на любом языке и просто переиспользовать во всех сервисах, не давая разработчику с чешущимися руками лишнего повода лезть в по сути бойлерплейтный код. у нас при деплое отдельный контейнер с накатчиком поднимается перед стартом сервиса или вроде того. бинарники у нас тоже не общие, апишка крутится в одном, всякие очереди расхлебываются другим. миграцию накатывал бы третий.
Так, короче я не очень понял по поводу логирования: 1. Идея использовать свою структуру и интерфейс, чтобы открывать файл, использовать log.SetOutput(file) ясна. Непонятно только, что в этом плохого? 2. Можно использовать различные фреймворки и там все круто сделано и т.д. и т.п., но чем это неудобно может быть в проектах? Типа зачем кастомный логгер приводить к стандартному логгеру? 3. Как передавать логгер как io.Writer, если тогда у него не будут работать методы, кроме Write(p []bytes)?
>>2395045 Автору нахуя-то нужно несколько логеров в проекте. Поэтому он решил сделать дженерик логгер (на самом деле просто открыватель файла) и передавать его другим логгерам.
>2. Можно использовать различные фреймворки и там все круто сделано и т.д. и т.п., но чем это неудобно может быть в проектах? Типа зачем кастомный логгер приводить к стандартному логгеру? Привести к единому типу (открытому файлу лол). А логгер сам разбирается как и что писать в этот файл. В конечном счете взаимодействие идет через логгер библиотеку. Передавая io.Writer ты просто сообщаешь логгеру, куда писать инфу.
Вопрос не в тему, ты под Виндой работаешь? Просто интересно)
>>2395050 >Какой-то не такой permition 0666? Да вроде такой как нужно, только не понятно что это значит в контексте Windows.
>Да, а к чему это, мне интересно Не знаю, интуицию тренирую. Просто насколько мне кажется, Windows затрудняет восприятие абстракций. Например, почему писать в стандартный поток вывода логи - ок. Если ты опытный анон, который свитчится в го, извини. Но для новичка, думаю, разрабатывать на Го будет гораздо полезнее и понятнее под Unix, что бы сразу привыкать к продакшн-инфраструктуре.
>>2395056 Я пробовал линукс (Ubuntu) на виртуалке, ну его нахуй. Чето снес - пиздец системе, VSC я ниосилил, а мне надо писать на C++ изредка (CLion говнище какое-то).
Перекат на линукс не то, чтобы проблема, просто на это опять уйдет время на настройку всякого вместо программирования. Легче это сделать когда я немного освою golang.
Ну то есть должно получиться что-то типа такого? >Привести к единому типу (открытому файлу лол). А логгер сам разбирается как и что писать в этот файл. В конечном счете взаимодействие идет через логгер библиотеку.
>>2395072 Если тебе не нужно несколько логгеров в программе (99.999% кейсов), то просто открываешь файл куда хочешь писать и передаешь его либе для логгинга. И вызываешь методы либы. Если есть сомнения насчет либы - бери логрус и не парься
Хотя обычно принято писать в stdout. Более опытные аноны поправят, если не так
>>2395045 >type LoggerInterface interface ты читаеш какую-то еботу. 1. поработаешь три месяца и определишься с тем логгером, который тебе нравится. тебе нахуй никогда не нужно будет внезапно переписывать своё логирование на зап вместо зеролога или использовать разные в разных частях программы. 2. в серьезной компании будет демократически выбранный корпоративный логгер которым все пользуются и тебе об этой еботе думать даже не придется 3. так делать не нужно. это логгер должен райтер принимать.
я так и представляю, затаскиваешь в проект либу, которая вместо обычного стд/логрусподобного интерфейса логгера принимает подобие райтера и хочет в него писать что-то в своём особенном формате, когда остальной проект пишет жсончики или наоборот. >>2395072 >TxtWriter есть же os.Stdout, который то же самое делает
>>2395275 >TxtWriter >есть же os.Stdout, который то же самое делает
Я поэтому про Винду и написал, как правило люди именно на винде не вдупляют, как можно работать с файлами, что такое потоки ввода вывода и что можно с ними делать. А если начинать с VisualBasic/C# то можно вообще научиться заводить пустые окна на выполнение любой операции. А юникс потом как рокет сайнс воспринимается, либо наступает просветление и человек больше виндоус не запускает.
https://itanddigital.ru/interviewgolang Аноны гоферы подскажите, решил почитать статейки типа (вопросы по голанг на собеседовании). И наткнулся на эту статью, с таким вот ответом. Прошу подсказать, за такое по ебучке нужно давать?
Вопросик к знатокам, прочитал давеча про web scale и мне стало интересно, а вообще гофер в 2к22 даже если сеньор должен будет писать какую-то программу или систему, чтобы программа запускалась в датацентре на нескольких машинах в многопотоке или это уже утерянные технологии и таким только деды занимаются?
>>2395573 Ну и в общем и целом интересно, такое вообще часто в России применяется? Мне что-то сложно представить вебмакакена, который помимо CRUDа как-то там чето в многопотоке запускает удаленно
>>2395573 Да почему же. Только актуальней становится. Гугл колаб например, Web3 и вся хуйня. >>2395574 Есть в нормальных компаниях. Вебмакакены по определению этим не занимаются
>>2395573 максимум классика. в ВБ у нас два ДЦ было, в авито 3. плюс N реплик сервиса которые между ними раскидываются. в редких случаях когда сервисы для ПК пишеш (например для окон ПВЗ например), то можно считать что ты центр мира с одной репликой.
>>2395697 >ВБ, Авито Как там работается? Про ВБ очень плохое слышал, пойдет туда джуном перекантоваться полгода-год? Об Авито мое представление получше, не ошибаюсь?
>>2396149 >за лето >алгосы, базу golang, gin + postgres + брокер сообщений Очень оптимистично. Я бы убрал "за лето" из уравнения. Тогда вполне. И почему именно в Озон, если там реджект или нет вакансий? Забить хуй?)
>>2395885 по моему опыту в ВБ хуета была, но я тоже склоняюсь к тому, что это зависит от отдела. никаких дейликов, никаких код ревью, нихуя не было, тупо писали в телеге задачку и всё. это при том, что у меня нулевой опыт работы был. технологии там вполне индастри стандарт, так что поразбираться интересно было и съебать после годика с плюсом к ЗП было легко. в авито культура/процессы топ
Как найти ждуну работу на гошечке находясь в жопе РФ? Какие проекты надо в портфолио иметь? Что можно запилить в соло чтобы прокачаться? (инб4 ничего волчистность) Очень надо работу найти до конца года, в бекграунде круд на рельсах, тудушка на реакте, нравится гошечка, думаю о суициде.
так, уважаемые аноны гоферы, призываю вас на помощь.
я правильно понимаю что горутины легковесны из-за следующих факторов 1. context switch происходит не на уровне ОС а на уровне потока на котором крутятся горутины 2. за счет малого стека на 2 кб при запуске горутины
>>2394614 >ты создаешь файлики Гохеры, вы серьезно жрете это говно? Не ТЫ блять создаешь файлики, а фреймворк/либа это делает за тебя, и делает он это на основе схем моделей которые ты написал, и работаешь блять ты не с сырым sql и с моделями, и генерятся не просто sql-файлики а файлы миграции, в которых также по возможности имеется опция даунгрейда
Это делает любая нормальная система миграций в любом нормальном ЯПе, даже в Петухоне
>>2397028 Я блять кому буквально сообщением выше вот этим >>2394414 рассказывал, что есть разные флоу работы со схемой базы? Тот, о котором ты говоришь, это первый ака orm'ный и он не лучше и не хуже прочих, просто у каждого из них свои особенности.
Анонсы, через 2-3 месяца начинаю искать первую работу программистом, на Го. Информации для изучения у новичков очень много, прошу помочь отделить зерна от плевел. Что важно для первого места, что лучше освоить в процессе.
Что имеем: ИМХО неплохо знаю базу и стандартную библиотеку (http, os, flag, IO, sync и проч.), Gin базово совсем, но, думаю, подразобраться будет не проблема. Не гнушаюсь лезть в исходники и разбирать устройство либ. По concurrency активно испльзую Mutex/RWmutex, WaitGroup, один раз пришлось использовать Atomic. С каналами работал значительно меньше, но понимаю. Из General: Git (базово): clone, pull, commit, push Linux: активно использую, терминала не боюсь, но без Баш-скриптов и хитрых пайпов. SQL (базово): фильтрация, агрегация, простые join’ы
Что планирую подтягивать: 1. SQL, Postgres, MongoDB, правильная архитектура данных и проч. Стоит ли вообще в NoSQL на начальном этапе лезть (выглядит конечно поудобнее, но всем нужен СКЛ) 2. Архитектура веб-приложений, Gin (или лучше что-то другое?), DDD 3. Алгоритмы, Problem Solving (сейчас быстро решаю задачки уровня Easy, иногда получается Medium). Знаю в крупняке, где юзают Го алгоритмы любят. 4. Docker 5. Правильная организация тестирования и логирования. 6. Git
В общем, буду благодарен, если поможете расставить приоритеты и необходимую глубину знаний по этим направлениям для начинающего. Возможно что-то важное забыл. Что можно оставить на потом/изучать уже по мере работы?
Знаю мнение здешнее, что на Го джуны не нужны, тем не менее вакансии периодически встречаю. Буду пробовать.
>>2399379 У меня тоже самое как у тебя анончег. Только на пару месяцев дольше изучаю. Могу посоветовать написать рест хуйню, прям конкретно прокачаешься во всем. Сам сделал чувствую себя ниибаца гейнием
>>2399447 Неплохой совет, надо бы, но писать очередной тудулист или "библиотеку" не интересно, да и не впечатлит никого особо. Вполне могут счесть за копипасту. А достойный проект в голову не приходит. Либо что-то, где вообще не нужна БД, либо 1-2 хендлера. Либо заумная херня, на которую желательно знать MQ, и как организовывать соответствующую архитектуру (еще один топик для изучения), писать 2-3 месяца и в итоге говно окажется, поскольку задачка не по скилу.
>>2399468 Да, рест хуйня будет промежуточным проектом сечешь? Я вот тоже думал что у меня будет максимум 3-4 чмоэндпоинтов но в итоге перевалило за 8, попробуй аля клин архитекчур реализовать, короче норм тема, за 1-2 недели норм тему сделаешь
>>2395050 Если на собесе серьезно спизданешь что работаешь под виндой - тебя обольют смуззи и сразу переведут в чуханы собрался быть бекендером - осваивай UNIX
Я нихуя не понял. Ну ладно закончились M зеленых потоков, дальше-то что? Что значит "планировщик управляет распределением горутины по всем возможным потокам"? (пик 1)
Типа он как-то создает новые зеленые потоки из нативных или что, не особо шарю в этом просто, подскажите.
И что значит рантайм го приостанавливает горутины при блоке и возобнавляет при разблокировке? Блокировке чего? (пик 2)
Кстати, что можете посоветовать в общем и целом по многопотоку, (native threads, green threads), но чтобы не оч дохуя по объему
>>2399762 Так же в тему добавлю вопрос Имеет ли смысл запускать в гоурутинах bash скрипты? То бишь что-то вроде go func () {cmd.Exec(....)} или даж с контекстом
С одной стороны запускать их в отдельном треде будет не очень, так как скриптов может быть много.
Иными словами, делаем /get на какой-то /handler1 и надо еще на машине кое что запустить и желательно проконтроллировать, как это лучше реализовать?
>>2399762 >Ну ладно закончились M зеленых потоков, дальше-то что? ну если программе больше нечего делать, то либо программа выходит, либо программа выходит с fatal error: no goroutines (main called runtime.Goexit) - deadlock! >И что значит рантайм го приостанавливает горутины при блоке и возобнавляет при разблокировке? Блокировке чего? (пик 2) ну допустим горутина делает блокирующий сискол. тут два варианта - если сискол на самом деле блокирующий, то у тебя блокируется весь тред с горутиной и рантайм создает новый. если сискол не блокирующий, то сделавшая сискол горутина все равно перестает выполняться и тред подхватывает другую, пока нетполлеру не придет уведомление, что едро готово и горутину которая хотела сделать сискол нужно шедулить. >>2399929 >go func () {cmd.Exec(....)} смысла нет. есть cmd.Start специально для этого. и вообще на каждый скрипт все равно новый процесс создается, так что экономия тут такая себе.
С Контекстом я всего лишь могу чуть более гибко решить свою задачу выходит, В случае cmd.Start получается я могу уйти в бесконечное ожидание? Но в случае контекста я явно задаю условие
>>2400161 это разные вещи. CommandContext инициализирует команду, Start её запускает, Wait ждет завершения. если ты про Command, то да, без контекста с отменой/таймаутом можешь навечно заблочиться пока yes печатает свои строчки. но команда без контекста тебе может пригодиться, если ты сам хочешь обработать отмену контекста и отправить sigterm вместо sigkill. тут уже CommandContext(context.Background, ...) или Command(...) на твой выбор.
Аноны, как реализовать что-то типа DefaultContext. Например, для всех запросов определенного типа передавать контекст с таймаутом 5 секунд (нужный контекст передается в структуру). Наивно думал, что можно просто завести поле defaultContext и его передавать. Но, насколько я понимаю, контекст с таймаутом одноразовый, и отсчет начинается с времени создания. Получается в структуре нужно заводить поле с конструктором контекста типа type struct { ... ____DefaultCtx func()context.Context }
>>2400430 Так и не понял, чего ты хочешь. Если нужен таймаут - ну бери его и указывай сразу где нужно. Если у тебя сервер, то можешь middleware с контекстом для нужных роутов прокинуть, теоретически.
Аноны как пет проект пойдёт репозиторий с разными алгоритмами и их реализацией (как пример сортировка обычная сортировка слиянием, однобуферная, многопоточная и итеративная и т.д.)? Хочу вкатиться на стажера, это вообще мне будет как + на собесе или это никому нахуй не нужно и никто на это смотреть не будет?
Вкатываюсь в Go из джавы, очень нравится. Посоветуйте актуальную литературу для версии 1.18, пожалуйста. Желательно, чтобы было печатное издание на русском. Книга из оп-поста "Язык программирования Go | Керниган Брайан У., Донован Алан А. А.", говорят, уже устарела.
>>2400795 >1.18 >на русском >печатное >для языка который от версии к версии практически не меняется, в который кроме контекста (за 5 минут можно разобраться), модулей (за 5 минут можно разобраться) и женериков (за 10 минут можно разобраться) ничего особо и не добавили
>>2400693 чет не звучит как пет проект, а как тупо репа чтобы гитхаб пустым не был уровня ответов к aoc/литкоду. если как либу оформишь с чем-то полезным вроде фильтра блума то мб.
>>2400977 Фильтр Блума, деревья, RMQ, LCA, алгоритмы поиска кратчайшего пути, ещё криптография скорее всего. Только если я нахуячу этого всегда там репозиторий оч большой будет, не заебно будет в теории даже для того, кто захочет этим воспользоваться?
кто-то может пожалуйста объяснить, почему в треде так активно обсуждают джаву? го адекватный язык, от того что джава хуже\лучше го лучше не становится, или я чего-то не понял?
Задача - динамически менять кронтаб от суперпользователя, но при этом мало добавить задачу, еще нужно удалить конкретную, поменять, что-то вроде круда только для кронтаба нужно сделать. Затык в том, что то, что должно выполняться доступно из под sudo crontab -e, от обычного пользователя не работает. Системный скрипт такой, так как еще интеграция с реальным миром, по вызову апишки го будет реагировать оборудование которое описано системными скриптами(этакая апишка, чтоб что-то сделать надо вызвать определенный скрипт или же подредактировать/добавить/удалить задачу в кронтаб через судошку)
>>2403427 Основной затык, что нужно делать все от супер пользователя, я хотел бы этот крон вообще в отдельный сервис вынести да и все, просто ничего не могу дельного найти относительно именно запуска с судошкой
>>2403439 С точки зрения памяти второй пизже, видел примерно подобные рассуждения в книге Таненбаума Операционные системы, где о параллелизме речь была, там петерсон еще то се
Я хз, я б так ответил, но моя компетентность слаба, просто пишу проект для кабанчика, разгербаю что там навалили до меня и привожу в порядок, такое
>>2403439 А зачем в общем и целом делать слип, если нужно что-то проверять, если есть sync.Cord? Слип локает горутину и мы не можем ничего делать n секунд. Есть инфа от знающих?
>>2403588 ну типа в ней данные могут какие-то быть (и скорее всего будут), к которым нужно обращаться будет, во время слипа хуй сосать можно тока и не обратиться к ним
Как поставить рантайм голанга в докеровский контейнер в целях разработ очки? Контейнер под вопросом требует ещё и питона в рантайме, а установка питона с пипом ручками - та ещё ёбля. Так что я за основу решил взять альпиновский питоновский образ и вставить в него голанг. Вроде как всё копируется и ставится вгетом и даже голанг лежит в /usr/local/go, но на первом go install падает с ошибкой "/bin/sh: go: not found". Мне именно рантайм нужен, а не бинарник собирать.
>>2397028 Нихуя жавадебила прорвало от сырых sql. >и генерятся не просто sql-файлики а файлы миграции, в которых также по возможности имеется опция даунгрейда Даунгрейд тебе говнолиба не сможет гарантировать, так как его возможность зависит от структуры отдельной миграции. Так что даже даунгрейд нужно ручками писать, хотя если ты из этих, то можешь интерполировать в строчный литерал, лишь бы сырой sql не трогать.
>>2404654 >даунгрейд нужно ручками писать Более чем в половине случаев - нет. Но когда нужно, этим можно озаботиться. и да, даунгрейд делается тоже не через сырые запросы а через ORM
Случайно обновил VsCode и появилась эта хуйня. Как они меня заебали своими погаными обновлениями, пользуюсь им так как не осилил nvim и в нем не работает нормально автокомплит.
Как убрать этот прямоугольник? Бо пиздец глаза режет, я даже тему менял, ничего не помогает, или как откатиться от обновления ?
>>2405162 Волшебные ОРМки знают по доступу к полю объекта, что надо делать fetchOne()/fetchMany() или fetchAny(), ага. Типичный мирок с ООП головного мозга.
>>2405117 Это я все делал. Удалось пофиксить только откатом вс кода на более старую версию, джсончик с настройками удалял, явно дело не в них. Не обновляйтесь с 1.69 пацаны, не рекомендую
Я просто хз, есть ли универсальная IDE от жидбрайнсов? Мне надо на пистоне писать, открывать юпитер ноутбуки, го, js , java желательно еще плюсы
Решил для подготовки порешать тестовые. Вот от Авито. https://github.com/avito-tech/adv-backend-trainee-assignment Собственно возникли следующие вопросы: 1) Стоит ли тут следовать DDD/Clean Arch. или проверяющие сочтут за карго-культиста, на такую задачу CA разводить и плодить директории? 2) Сортировка + Пагинация. Какие должны быть интерфейсы для получения данных из базы? Насколько целесообразно реализовывать на сыром SQL? Выглядет ебовато. Как реализовать без ORM?
>>2408105 >выколивать их из кода Вот пока не могу придумать, как назвать функции. Пока на ум приходит что-то типа этого, но выглядит всрато. GetOrderByDate(context, descending bool, limit int, offset int) []Entity GetOrderByPrice(context, descending bool, limit int, offset int) []Entity
И еще один вопрос. Если я выбираю реляционную структуру, и мне надо хранить до 3 ссылок на фото товара, нормально ли делать такую схему?
CREATE TABLE IF NOT EXISTS advertisements( id SERIAL PRIMARY KEY, title VARCHAR(200), price DECIMAL(15, 2), description VARCHAR(1000), photo_1 TEXT, photo_2 TEXT, photo_3 TEXT, );
>>2408150 мы бы возможно запихнули их в jsonb поле. в отдельную табличку должно быть тоже норм. >>2408131 тут похоже что колонку сортировки нужно передавать параметром, там же только одно слово после order by меняется в запросе. >>2408086 достаточно должно быть обычных репа+сервис+ручки+модельки без ДДД ебатории. sql по классике у нас билдится руками в сервисе, часто даже без всяких squirrel. ормов тут ещё не видел.
Вообще чтобы понять основную идею отображения горутин на потоки необходимо первым делом снизойти на уровень системных вызовов операционной системы. Вызовы бывают синхронные по типу (здесь перечислены функции на языке Си по UNIX-стандарту, аналогичные есть на винде) read, write, create, dup, dup2 и так далее. Синхронные они в том смысле, что основной поток исполнения блокируется до тех пор, пока эти функции не вернут результат. Допустим, ты читаешь файл и read "усыпит" твою программу, до тех пор пока не прочитается нужное количество байт. Более гибкая, но запутывающая альтернатива -- это асинхронные вызовы по типу aio_read, aio_write. Их основная суть в том, что ты прокручиваешь цикл для выяснения происходящих событий - запись завершена, чтение завершено и т.д. При этом твоя программа не блокируется. В основном цикле ты можешь работать с разными вызовами и событиями
Как итог: горутины размазываются по тредам. Когда тред определяет, что в горутине происходит асинхронный вызов, то он отправляет его на асинхронное исполнение и цепляет другую свободную горутину. При этом отдельным потоком (если я не ошибаюсь) запускается net poller который узнает статусы исполнения горутин. Если асинхронное исполнение завершено, то он возвращает горутину на поток обратно. Тоже самое неверно для синхронных вызовов. Если горутина использует синхронный вызов, то она никуда не отправляется и по сути пожирает один тред
>>2408558 >запихнули их в jsonb поле Так реляционка же? Если да, то тут нарушение нормальной формы, не >тут похоже что колонку сортировки нужно передавать параметром, там же только одно слово после order by меняется в запросе. И правда, спасибо!
>>2409343 >Так реляционка же? Если да, то тут нарушение нормальной формы, не в тестовом может это и интересно, что ты знаешь джойны и как нормализовать БД (в комменте вполне можно обосновать почему ты решил денормализовать), но ИРЛ никому нахуй не нужна нормальная форма, если она не дает никакой выгоды и из-за неё приходится усложнять запросы агрегатными функциями/джойнами/дополнительными запросами. если у картинок нихуя нет дополнительных свойств, у тебя появляется какая-то странная колонка для порядка картинок, которую хз как обновлять при добавлении/удалении картинки из середины, и тебе нахуй не никогда не нужно будет картинки выбирать отдельно от объявления, то мне кажется это валидный кейс для денормализации.