Это копия, сохраненная 30 апреля в 21:15.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
С чего начать:
- В обязательном порядке проходим Go Tour:
https://go.dev/tour/welcome/1
- Читаем документацию прямо по порядку (пункт "Learning Go"): https://go.dev/doc/
- Ознакамливаемся с общим roadmap по изучению языка и сопутствующих инструментов: https://github.com/Alikhll/golang-developer-roadmap (постоянно обновляется сообществом)
Литература:
- Донован, Керниган "Язык программирования Go"
- Также хорошие книги для начала: https://www.golang-book.com/ и https://www.practical-go-lessons.com/ (веб-версия - бесплатная и хорошо подходит для новичков в программировании)
- Книги из списка https://github.com/dariubs/GoBooks
Полезные ресурсы:
- Сборник паттернов и инфы по микросервисам: https://microservices.io/
- Обновляемый список с пакетами: https://github.com/avelino/awesome-go
Прошлый тред:
>>2972146 (OP)
1. Тяжело читать тонны простогобойлерплейт кода, большой проект на джаве/шарпе переварить в разы проще.
2. Васяны с ооп бэком тащат его в го, причем дохуя.
3. Никакого DI, тупо дрилинг аргументов вниз не отрицаю принадлежность этой фичи к ооп и рефлексии, но как шейрить что то глобальное адекватно?
4. go.mod это пиздец
5. Кодогенерация типов/енумов это пиздец
6. Нестабильная экосистема
7. Проябывает в перформансе расту, шарп уже на пятки ссыт
8. Нативный компилинг? Та же джава и шарп уже ссут не на пятки а в харю.
9. В ооп хотя бы завернуть сложность можно, а тут композиция не выглядит мощной и удобной альтернативой
10. Дженерики только недавно добавили, какого хуя их изначально не было? И учитывая парадигму го, они нужны или мейнтейнеры прогнулись под всхлипы смузихлёбов?
Ещё до кучи вопросов есть, заебало писать.
Объясните смысл этого говна в вебсервисах, кто блять сказал что это хорошая идея? Или кидайте хороший примеркод/проект, а то вижу одно говно.
Гугл делали его для себя, неужели призрачная легкость и компилирование нативного бинарника хватает что бы залетать на рынок и срать в уши? Тупо ебут своими горутинами память вместо проца, тк плашки с оперативкой в серверах менять проще чем проц. А дауны сидят и с довольным ебалом слюни пускают.
,
Я вот тоже задаюсь примерно такими вопросами.
Один из вариантов ответа - оно успело устареть, так толком и не развившись. Потому, что было основано на старых наработках, и реализовано пенсионерами. Т.е. 10 лет назад это всё было (вроде как) стильно модно молодёжно, а потом хуяк, и всё. Так бывает.
И тоже потихоньку склоняюсь в пользу джавы, в смысле - не перекатываться.
Хотя, вот для CLI-утилит оно совсем даже не плохо. Самодостаточных, или если важна скорость/конкурентность/низкое потребление памяти. Сервисы писать - милое дело. Как замена Си в очень многих случаях, если это не настоящее системное программирование. Но, для бизнес-приложений (aka энтерпрайз) оно не годится совершенно, тут и обсуждать нечего. Ибо там абстракции решают.
И я совершенно не жалею, что потратил на это время. И, возможно, из этого ещё выйдет профит.
>ебут своими горутинами память вместо проца,
Нет, это не так. Ебут именно проц. Память потребляется по минимуму.
В этом и смысл.
>не хейтер
>10. Дженерики только недавно добавили, какого хуя их изначально не было? И учитывая парадигму го, они нужны или мейнтейнеры прогнулись под всхлипы смузихлёбов?
это ты блять буквально из существующих дженериков высосал предъяву что их раньше не было?
>Гугл делали его для себя
значит другим нельзя пользоваться или что?
>с довольным ебалом слюни пускают.
в чем проблема когда люди довольны работать на гошке?
в целом не понимаю мотивацию этого высера
Если следовать законам физики, то го не может быстро работать. Его бинарник слишком большой для того, чтобы уместиться в память. Горутины отжирают гигабайты памяти https://pkolaczk.github.io/memory-consumption-of-async/, а ГЦ занимает 100% процессорного времени. Только вот го об этом не знает — летает себе и всё тут.
Что-то странное он там намерял в конце.
Вообще, тест странный, т.к. без данных о реально выполненной этими потоками работе - это фуфло. И вообще, как-то маловато там подробностей.
Если бы ты не был таким тупым, то сходил бы по ссылке и посмотрел, о чём вообще речь. И не писал бы хуйню.
> Вообще, тест странный, т.к. без данных о реально выполненной этими потоками работе - это фуфло
Там же написано что просто слипались на 10 секунд. Подозреваю что отвратительный результат у го связан в первую очередь с использованием time.Sleep вместо специально сделанных для потоков таймеров
Вот и я о том же.
Тест на многопоточность без реальной работы потоков - это просто бессмысленная хуита.
По сути = это у него тест эффективности реализации sleep в разных языках, лол.
>>2997566
проблема не в эффективности time.Sleep. проблему гошки (а точнее особенность, т.к. тест действительно хуйня и для рил лайф малорепрезентативен) в комментах описали - на каждую горутину аллоцируется 2КБ стек. от того, что там в time.Sleep происходит, мало что поменяется.
какая-нибудь таска в однопоточном языке с ивентлупом не будет столько отжирать, такое загнется по другой причине.
Ну и нормально, 2 кб это ни о чём вообще.
Это рассчитано на реальные задачи, а не на красивые циферки говнотестов.
Там ещё интересно, что у горутин стек растёт до упора вообще, что позволяет делать рекурсию любой разумной глубины, например.
Интереснее другое - зачем надувают весь этот инфоцыганский стильно-модно-молодёжный хайп вокруг нишевого языка с высоким порогом вхождения?
И с маленьким количеством вакансий, а для стажёров/джунов - просто вообще без?
Какова цель вот этого вот всего?
Добавлю - у этих видео десятки тысяч просмотров.
Я не думаю, что есть столько русскоязычных молодых людей, которые могли бы программировать на Го, и которые хотели бы смотреть всю ту чушь, которую эти инфоцыгане транслируют.
Напомню - это совсем не молодёжный язык. Очень сложный (в реальных задачах), вакансий нет, требования запредельно высокие.
Вопрос - кто и зачем это смотрит?
>есть столько русскоязычных молодых людей
Дак смотрят те, кто хочет стать программистом и получать 300к/сек, а не те, кто уже программирует.
>Интереснее другое - зачем надувают весь этот инфоцыганский стильно-модно-молодёжный хайп вокруг нишевого языка с высоким порогом вхождения?
Хомячки вроде тебя и надувают. Нехер смотреть всяких инфоциган. Ты им поднимаешь просмотры, и у них от этого ещё больше хайпа.
Смотри вакансии и требования в них.
Ну, совсем левым людям такое смотреть просто не интересно.
Несмотря на желание получать 300KK/ns.
Может пыхобляди смотрят?
можно и так сказать
>Может пыхобляди смотрят?
Так и есть, лол. Люди сидят-пердят на своей пыхе/шарпах/питоне лет 5, а потом натыкаются на видос и идут слать резюме на гоферские вакансии, даже не удосужившись прочитать пару статей или хотя бы пройти тур по го. И ведь не краснеют, когда рисуют себе опыт по 5+ лет в хайлоаде с микросервисами, наебывая этим хрюш, а потом по полчаса хвалятся опытом на техсобесе и сыпятся на первом же джуновском вопросе про структуру слайсавам смешно, а я каждый раз охуеваю
Хуже волков, чесслово. Те хоть как-то готовятся к собеседованиям и прорабатывают тему, а эти тупо пытаются на понт взять и по-братски пустить поучиться покодить на модном языке с 300к зепкой и лычкой сеньки.
Лол, вот же шакалы.
Но, это не даёт ответа на другую часть вопроса - зачем такое кино снимают в таких количествах?
Просто жажда личной популярности? Как-то сомнительно. Слишком много этого стало. И все они гордо представляются от имени своих работодателей, играют в собеседования и т.п. Что наводит на мысль, что работодатели и платят за шоу.
Будь оно иначе - это были бы видосы про программирование (которые смотрело бы 1.5 человека), а не про то, как пролезть к кормушке. Ну кому нужны конкуренты, в самом деле?
И везде актёры представляются бывшими пыхоблядями, и прочим днищем. Т.е. они как бы говорят зрителю - видишь, мы - такое же быдло, как и ты. Мы просто пришли, рассказали сказку и теперь имеем 300KK/ns. И ты тоже сможешь пролезть - язык простой, делать нихуя не надо, просто получай деньги, еби гусей, будь счастлив.
Очень напоминает найм девушек на работу за границу в 90-е.
Без интима, разумеется, ну как вы могли такое подумать?
Ловите наркомана. По твоему, хайлоад бывает только на говняшке? Если ты такой дохуя эксперт по теме, так спроси, чем плох jwt токен и почему медиатор - это антипаттерн, а не душни хуйней про внутренности языка. Спроси еще про сборку мусора, блеать, будет классика епама.
Вангую в тебе чмоню мидла с двумя годами опыта, который наконец-то дорвался до собесов и теперь УТВЕРЖДАЕТСЯ.
Это случайно не ты с такими смешными усиками?
>спроси, чем плох jwt токен и почему медиатор - это антипаттерн
не тот анон, но про это на отдельной секции поебут. а на секции по го ебут по го, регламенты такие. не у компании цели каждого вкатуна брать. да и наберешь ебанатов - тебе же с ними потом работать. к слову, самое главное это практические задачки. если челик их может решить, то про самые основы вроде слайсов/мап у 90% нет проблем ответить.
>хайп вокруг нишевого языка
Москва, вакансии отфильтрованны по названию и выкинут небэкенд
Go - 515
C# - 495
PHP - 504
Очень нишевый язык! Я запрещаю вам писать круды!
А без опыта вообще реально попасть на собес?
Из этих 515 вакансий 90% требуют опыт от 5 лет, причем, пять лет именно кодинга на го. По остальным хрюши имитируют бурную деятельность и собирают базу, человек на самом деле не нужен. Если на другие языки берут всех, от ждуна до лида, и можно вкатиться, то на го нужны только сеньки.
Ещё поди офис, а не удалёнка и провинциалам вообще нет шансов вкатиться
Особенно понравилось про бинарное тело.
Которое можно лучше сжать.
И это программисты, блядь, вообще охуеть.
https://www.youtube.com/shorts/RG-DLbmsr3A
У меня такое кино совершенно отбивает желание становиться одним из этих людей. Это просто себя не уважать.
Логаут юзеру не сделаешь просто так, токен считается валидным, пока у него не истечет время годности. Приходится хранить список всех активных токенов, что убивает всю идею. По сути, мы имеем обычную куку, только большего размера, с возможными дырами в безопасности и для проверки которой надо напрячь процессор, а потом все равно пойти в редис и посмотреть, а жива ли сессия. Designed by Google, directed by Robert Weide.
> Логаут юзеру не сделаешь просто так, токен считается валидным, пока у него не истечет время годности.
Время токена устанавливается на несколько минут. Если требуется выполнить операцию на сервисеВ, а токен протух, то идешь в сервисА за новым токеном, делаешь хуйню в сервисеВ. Имея два токена, можешь ходить в сервисВ и сервисЦ.
Если бизнес хочет точности отзыва токена (секунда в секунду), то можно это устроить, используя очередь сообщений.
> Приходится хранить список всех активных токенов, что убивает всю идею.
Не надо. Нужно хранить только таблицу юзеров с его данными. По его ИД отзываешь.
> По сути, мы имеем обычную куку, только большего размера,
Размер, да, есть. А с чем сравнение делаешь?
> с возможными дырами в безопасности
Какие? Дыры разве что только в библе, которая их генерит, и алгоритме, который выбрала прокладка между стулом и ноутбуком.
> и для проверки которой надо напрячь процессор, а потом все равно пойти в редис и посмотреть, а жива ли сессия. Designed by Google, directed by Robert Weide.
Какая сессия-то? Ты просто подписываешь ИД юзера и дату хождения нахуй, генеришь строку.
Есть oauth для таких штук с аксес и рефреш.
>>2997020
Я начинающий кодер, вот недавно получил свой первый офер на го вакансию в финтехе, на данный момент около полутора месяцев на испытательном сроке, на го кодить начал сравнительно недавно, около полугода назад, до этого изучал год джаву(и до этого еще пол года шарпы), но конкуренция там бешаная, наверное раз 7 мне отказали с учетом траты времени на выполнения тестовых задач и собесов, на го было меньше конкуренции, отчего сильно обрадовался.
Но после прочтения твоего поста(первый раз зашел почитать треды, не бом бом как это называется), возникло неосознанное ощущение, что так и есть(есть едва уловимое рациональное объяснение, что большого проекта не напишешь), соответственно есть вопрос, а можно ли вырасти в отличного программиста, продолжая кодить на го? Ну то есть не получится ли так, что спустя время мой потолок будет что-то типо перкладывания джисонов?
Если не получится, то есть ли варианты, переката на джаву или шарпы после получения определенного кол-ва опыта в конторах?
Если ты хочешь вырасти как программист - Го вообще не вариант.
Я просто не представляю, что на нём может написать человек без опыта программирования на других языках. Дичайшую хуйню, разве что.
Удивительно не то, что джунов не нанимают на Го.
Удивительно, что иногда их таки берут.
Поздравляю. Первая часть твоего поста воодушевляющая. А во второй ты скатился и начал ныть.
Хватит ассоциировать свой успех или неудачу с конкретным языком программирования. Хороший программист он таким и остаётся вне зависимости от языка. Это просто блять инструмент. Ты можешь хоть 10 языков знать и использовать. Если завтра go исчезнет, от этого никакой трагедии не случится. Программирование есть, было и будет. Что ты вложишь в это слово, зависит только от тебя. Если ты считаешь что программирование перекладыванием джейсонов, значит ты такой и есть. Проблема в тебе. Рукожопам всегда что-то мешает, то гены не такие, то страна не такая, то язык не такой, то работодатель не такой, ну и так далее.
Ну то есть, это не проблема языка, что тебе дают такую работу. Если у дворника скучная работа, то проблема в метле что ли? Логика пиздец.
Вообще я даже не задумывал логику, что мне просто досталась работа следовательно нишевая область, просто по заверениям поста - проекты не могут быть грандиозными и го , это что-то типо пхп, я бы просто не хотел тратить время на что-то неперспективное, я конечно не отрицаю, что есть замечательные программисты на пхп, но хотелось начать с фальшстартом, а не с калом в руках
конечно упрешься в потолок. вот в шарпах и джаве можно бесконечно надрачивать на ООП, паттерны и тюнить ГЦ жвм, чтобы перекладывать жсоны более эффективно. конечно для эмбеддед/графики/системки у тебя все названные языки хуевые и ничего не другого не светит. да и дальше сеньора не уедешь, т.к. там уже мало играет роли количество заюзанных паттернов на строчку кода, но зато будешь бесконечно расти в отличного программиста.
Хм, ну я предварительно еще делал 3 месяца боевой проект на стаже за бесплатно, так что мне не кажется удивительным мое избрание, хотя ситуация на рынке России печальная, складывается ощущение, что единственный вариант для контор, как восполнить дефицит кадров - это учить собственных
Хм ну точного определения я не могу дать, кажется из-за нехватки опыта, но могу сказать, что должно быть в грандиозном проекте: решание тасок, проектирование заставляет двигаться извилины, прям что-то наподобие чтения доказательв из высшей алгебры
Допустим решая на данный момент задачи на го, которые мне ставят , мне конечно тяжело, но 80% времени мне кажется я занимаюсь рутиной, написанием кода(именно писаниной), тесты и коменты
>просто по заверениям поста
Кто это говорит? Ноунейм из интернета? С таким же успехом можно подойти к любой бабке на улице и спросить что она думает по поводу будущего golang'а. Это просто чьё-то мнение. Чем он это обосновывает? Тем, что сам язык ограничен? А ты дошёл до потолочка возможностей языка, чтобы так говорить? Уверен, ты ещё даже 5 процентов возможностей языка не исчерпал. У тебя ещё ёбанная бездна для роста. Я не знаю кто так говорит. Но я вижу что go используют paypal, google, uber, twitch, cloudflare, capital one, twitter, microsoft. Если бы был хуёвый язык, стали бы они его использовать? А мнение кукаретников мне до пизды. Пусть кукаретники вначале представятся - кто они, откуда взялись и какие у них заслуги. Я тоже могу чё-нибудь пукнуть, а-ля через год всё программирование накроется медным тазом. А ты теперь докажи, что не накроется!
Да ты прав, вероятно я просто с ничего решил покрутить комок мыслей, как столкнусь с рутиной и невозможностью роста, так и буду решать данный вопрос
>невозможностью роста
Блять для тебя это вообще не актуально. У тебя в любом отношении гигантские, просто невъебанные возможности для роста. Невозможность роста среди программистов обычно понимается как "зарплатная невозможность роста". Это когда ты 10 лет в отрасли, а у тебя зарплата не растёт. Тебе рано задумываться над такими вещами. Ты и так в финтехе работаешь, в относительно жирной малоконкурентной нише. Чё тебе ещё собака надо. Тебя надо отвести на экскурсию в НИИ, чтобы ты маленько посмотрел как работают программисты С++/embedded и сравнил с тем что есть у тебя сейчас.
Тебе грех ныть. Каждый раз когда ты ноешь, должно раскрываться небо и боженька должен тебя пиздить молнией.
так тут дело в тематике твоей конторы. у джавы/шарпа/гошки - 99% контор жсономешалки. свичайся - не свичайся, соотношение примерно одинаковое. в графике/хардовом эмбедеде/МЛ матеша была бы, но там и другие языки.
а на бэкенде формулы максимум уровня посчитать расстояние от lat1/lon1 к lat2/lon2 с учетом кривизны Земли. может, у отдельных команд будет что-то похардовее, но обычно сложные задачи это либо дроч на оптимизацию, либо архитектурный дроч, где тебе нужно придумать план на год вперед и убедить несколько команд что твои идеи охуенные.
Хаха, обнадежил - спасибо, ну я поэтому и пошел кодить что-то не связанное с матешей, потому что в нии нереально душат за гроши, у меня как раз диплом сейчас в кафедре кибернетики
Честно говоря, в финтехе computer sciencами и не пахнет, максимум с чем мне приходилось пока работать, это с криптографией и то там не нужно было разбираться в устройстве конкретного метода, так как в пакетах уже все написано
Хотелось бы что бы был сайнсы ваши, но не так много как например в исследовании операций
Короче, у тебя пока ещё поводов переживать нету. Придёшь годика через 2-3. Сейчас это просто надуманные страхи в твоей голове и не более того.
ну большинство работок это и есть просто software engineering с элементами computer science. можешь компенисировать это NIH синдромом и писать все заново, но лучше не надо.
>3 месяца
Дружище, я тебе открою маленький секрет.
Чтобы научиться программировать - нужно примерно 10 лет.
Об этом ещё Эрик Реймонд кто это? как-то написал хорошее эссе.
Это не говоря уже о том, что таким вещам учатся всю жизнь.
>как столкнусь с рутиной и невозможностью роста
Это правильно.
Вообще, хороший/плохой язык - это не то определение.
Важнее - какого рода абстракции даёт язык в твои руки.
В этом смысле Го - не так плох. Но, желательно уже понимать, что вообще бывает на свете, тогда ты его оценишь. А с улицы может быть тяжеловато.
Например, в интернетах есть книжка "Functional Programming for the Object-Oriented Programmer", https://leanpub.com/fp-oo
Там на языке Clojure (лисп для jvm) пишут с нуля объектно-ориентированную систему. Я гарантирую, что после такого опыта ты станешь гораздо более лучшим программистом. Или после прочтения Functional Programming In Scala. Или после Functional Reactive Programming (это не для слабонервных).
Если хочется чего-то не столь хардкорного - то, например, React.
Там вполне себе такое практичное FP в полный рост. И вообще на JS сейчас достаточно много продвинутых техник программирования - язык позволяет.
Есть, кстати, хорошая книжка Composing Software, Эрика Эллиота:
https://scanlibs.com/composing-software-exploration-programming/
Ты не понял. Суть токена была в том, что тебе не надо ходить куда-то еще для проверки, достаточно самого токена и статик ключа. Можно запустить хоть тысячу серверов для авторизации и все они будут работать параллельно, не мешаяя друг другу. Как только у тебя появляется внешнее хранилище, куда твои сервера должны сходить, начинаются гонки и вся идея идет по пизде.
Когда ты получаешь от клиента session cookie, ты по этой куки идешь в редис и смотришь, есть ли сессия по такому ключу. Когда ты получаешь токен, ты сначала ебешь CPU, а потому все равно идешь в редис ну ты понел. Плюс, гоняешь дополнительный трафик по сети, который тоже стоит денег. В итоге в профите только продавцы облаков, ты им больше закидываешь бабла, а для тебя толку ноль.
Сессия - это не только юзер айди, сам по себе он бесполезен. Надо, как минимум, хранить список ролей, чтобы стажен охранник не имел доступа к данным главбуха.
Вообще я занимаюсь программированием около лет 5-6, начинал я еще школьником, батя мне тогда микропроцессоры дал и заставил что-то делать, писал я на чистом C, платы были msp430 вроде, но именно нормальный рости и изучение началось месяцев 6-12 назад
Эх, я не москвич, в сибе мотаюсь от офиса до универа по 30 минут, ноги уже как у проф. специалиста
Я из своей деревни по 3 часа добирался до универа в ближайшем миллионике, а вечером обратно. Оставалось время только поспать.
Если бы не мой адрес проживания, то давно бы уже вкатился в программисты. Сейчас вот хочу на удалёнку попробовать, но походу шансов нет.
Хз, по ощущениям все как будто топят за удаленку и более менее компании - ее предоставляют, у меня в целом время в офисе никак не контролируется, я могу че хочу делать, но именно что бы удаленку получить , наверное надо просто стать опытным, а так я думаю ты можешь пойти на что-то типо удаленной практики с дальнейшим устройством, например контора aston devs занимается таким, там легкий собес на практику довольно таки, но вилки конечно печальные, практика бесплатная - 3 месяца, потом ты получаешь джуна-1 - 53 к в мес вроде, рост раз в полгода + еще ты подписывает галерский контракт на то что ты должен после практики около полуторагода отработать, я поэтому и отказался
Ну для улучшения навыков в программировании, слишком много тропов импрува, область такая, что нужно выстраивать идеальный путь из материала, так его количество огромно и при этом все быстро устаревает и т.д.. Именно про функциональное программирование: насколько я знаю, изучение данной темы мне поможет делать более эффективные stateless программы, но вообще еще в школе я несколько раз посещал курсы F# - функциональный язык, показалась какая-то шляпа, ход мысли конечно преображается , но прикладная составляющая крайне мала
>F# - функциональный язык
Это - Микрософт, прежде всего. Т.е., ненужная хуета.
>прикладная составляющая крайне мала
Я уже привёл в пример Реакт.
И вообще современный JS - это очень много практичного ФП. Потому, что JS - это Scheme с сишным синтаксисом, лол.
Но, главное в том, что это меняет ход мыслей, и ты начинаешь иначе видеть задачу.
И делать такие вещи, которых ты не сделал бы без знакомства с ФП.
Взять те же промисы - они для васяна промисы, васяну неудобно, а для тебя это - монады, и тебе хорошо. И ты этот же паттерн применяешь ещё в куче других случаев. И ты немножко иначе смотришь на обработку ошибок в Го (и на ряд других вещей в нём же).
При этом писать чисто функциональные программы не нужно и даже вредно.
> микропроцессоры
Это большое дело. Бате - респект.
А если ты ещё и осциллографом тыкал во всё это - так вообще.
Цифровая электроника, микропроцессоры, низкоуровневое программирование - это те вещи, которые очень много дают даже если ты потом пишешь на джаваскрипте. Это меняет сознание, и даёт такую интуицию, которой просто не может быть у васяна, учившегося на пыхе. Или у эдуарда, учившегося в матшколе.
Осцилограф тыкал, батя работы принес, помойму нужно было в определенном порядке построить положительный сигнал на выход к двигателю, мой батя даже мне экзаменационную работу дал за 5к, правда от денег я отказался, а так да низкоуровневая херня сильно вправляет мозги, микропоцессоры меня сильно не заинтересовали - еще зелен был, но потом начал на с++ дрочить компетитив задачи, и из-за того что много работал с регистрами в микропроцессорах, предпочитал писать алгоритмы с адрессной арифметикой, как -то так
Хз насчет реакта, писал маленький сервер на нем для мини приложения вк, в целом не очень отношусь в динамической типизации, потому что мозг заплывает и в овоща превращаешься, вывел это из опыта написания мл на пайтоне, из-за того что с базой не разобрался, но при этом все работало, получалось крайне не оптимизированные модели - кал полный
Кстати а насчет промисов и монадов, звучит круто, в джаве немного читал реактивную либу, но максимум работал со стримами в джаве, кстати очень понравилось, но тут уже на любителя
>маленький сервер на нем
Ты, похоже, путаешь React и Node.js (или что-то ещё из этой же системы).
React - это библиотека для создания компонентов пользовательского интерфейса. Типа ангуляра или vue. Но, чтобы "компилировать" (транспилировать) код - нужен Node.js.
Ну, и локальный сервер для тестирования на нём же поднимается.
Динамическая типизацация - да, это кал. Поэтому я, по возможности, использую Typescript для фронтенда. Но, при должной дисциплине и наличии хорошей IDE - можно и на JS - типы можно прописывать в комментариях JSDoc, примерно, как type hints в питоне.
Ну да, сервер был на ноде, но джонсоны отдавал в реакт(конечно сомнительный опыт...), если бы не апи вк, который требует нода, то написал бы на чем-нибудь другом, думаю это можно, но просто более запарно
Есть книжка Functional Programming in Java. Очень рекомендую.
Она больше теоретическая, т.е. не про стримы, а про фп подходы вообще. Но для повышения квалификации, если пишешь на джаве - очень даже. И, во многом, она лучше, чем знаменитая FP in Scala. Для примера - там описано, каким способом можно на джаве делать хвостовую рекурсию (TCO/TCE) да, через жопу, но, тут важен сам подход..
Но, надо понимать, что это не для начинающих.
Не соменваюсь что книжка классная, но сейчас пишу на го, раньше пытался пробиться на джаве, но конкуренция душит сильно, да и список литературы не убавляется совесем, на данный момент мне бы закончить читать чистую архитектуру и компьютерные сети Олифера
Кстати, возможно с джавой дело не в конкуренции, просто перед переходом на го, решил писать в nvim, в итоге втянулся и просто понравилось, что все понятно в отличие от джавы и ее DI - все под капотом, ничего не понятно, недавно даже с одногруппником решили проект запилить, ну и бек на джаве сделать, так как появлялись ошибки, логи просто убогие, ничего не понятно, в том же го с открытыми пакетами и go to definition, почти моментально становиться понятно в чем проблема
>Но я вижу что go используют paypal, google, uber, twitch, cloudflare, capital one, twitter, microsoft. Если бы был хуёвый язык, стали бы они его использовать?
>Когда ты получаешь от клиента session cookie, ты по этой куки идешь в редис и смотришь, есть ли сессия по такому ключу. Когда ты получаешь токен, ты сначала ебешь CPU, а потому все равно идешь в редис ну ты понел
Чел, ты просто нихера не понимаешь как надо использовать JWT.
1. Если у тебя проверка JWT это нагрузка на CPU, это значит что пришло время обновить свой Pentium 4.
2. JWT кука экспайрится когда экспайрится, всё! Ни в какой Redis, не надо, вот вообще не надо, совсем. Даже на минуточку, только спросить. Если ты начинаешь прикручивать Redis, то ты долбоёб который не разобрался в технологии.
JWT логаут работает с задеркой в TTL JWT токена. Всё! Прими это как данность. Если в твоем магазине дилдаков нужно логаутить пользователя в течении 63 мсек, то тебе просто неподходит JWT.
>Сессия - это не только юзер айди, сам по себе он бесполезен. Надо, как минимум, хранить список ролей, чтобы стажен охранник не имел доступа к данным главбуха.
Я в принципе ожидал, что ты нихера не разобрался, но настолько это прям вообще.
Да, есть такое дело.
Собственно, Го этим и привлекает - доступностью. При всех своих недостатках.
Под "доступностью" я имею в виду не какую-то лёгкость программирования, а сочетание очень многих факторов, лень расписывать сейчас.
Так бы сразу и сказал, что ты джун после курсов. Ты даже не понял, что я написал.
По сути есть что возразить?
На го зарплаты такие же, как и на других языках. Литерали нет смысла учить эту хуиту и проходить собесы, чтобы в итоге получить столько же. Или даже меньше, ведь это илитный язык для особенных на нем в хухле пишут.
Ну так то чел прав, а зачем прикручивать какой-то сторадж, ака сессию с JWT, какой смысл затрачивать дополнительно время ЦП, если ты не освободил от ебки с сессиями в памяти?
А мне нравится язык и хотел бы на нём работать, но боюсь, что меня не возьмут из-за отсутствия опыта.
Короче, нахуй, язык для даунов
Зато у го нет прожорливой виртуальной машины и сервисы не весят сотни мегабайт. Этого уже достаточно чтобы язык был неплохим.
>Зато у го нет прожорливой виртуальной машины
Зато есть жырный рантайм.
>сервисы не весят сотни мегабайт
Еще как весят.
> Но я вижу что go используют paypal, google, uber, twitch, cloudflare, capital one, twitter, microsoft. Если бы был хуёвый язык, стали бы они его использовать?
Во первых, ты так уверен что будешь работать в этих фирмах?
Во вторых, сельский интернет-магазин имеет такой же трафик как в этих фирмах?
Нет. Сервисы на го кушают меньше чем JVM, и докер образы мелкие, особенно если бинарь в скратч завернуть.
Ты поставил время жизни токена 1 минута. Через 63 секунды от пользователя приходит запрос с устаревшим на 3 секунды токеном. Твои действия?
Посылаем нах
Это не проблема самого языка. Если где-то каких-то работ нет, нужно спрашивать с работодателей. Не язык виноват, что он не создал рабочие места. А почему они не создали - боялись, подумали "а вдруг чо", не знали или ещё какая причина - это уже вопрос другой. Чисто технических причин тут нет. Это больше к психологу.
Только если контора целенаправленно нанимает людей без опыта на удалёнку. Такое бывает, сам несколько раз видел на hh. В таком случае подразумевается, что их будут учить.
Но, вряд-ли там будет Го.
Вообще, без опыта лучше пойти в офис, если есть возможность. Толку будет в разы больше.
Ты вообще не отдупляешь базовые вещи про JWT, но зачем то лезешь со своими охуенно ценным мнением.
Если приходит запрос с устаревшим токеном, посылаешь рефрешить его. А уже в сервисе рефреша можно принудительно экспайрить сессии.
Бля, я не знаю, устроишься ты или не устроишься. Это зависит от работодателя. Но если так говорить, то получится самосбывающееся пророчество. Потом будешь "а я же говорил" твердить. Всё зависит от того, нужны ли конкретному работодателю удалённые работники. И от твоей дисциплины. Может ты будешь по 5 минут в день работать, хуй тебя знает.
Надо рефрешить или юзер отозвал этот токен и надо вернуть 403?
Сложные вопросы, да джун, это тебе не литкод дрочить.
Сам ты можешь выучиться только до определённого предела.
Дальше - надо решать реальные задачи в реальном окружении.
Это называется практический опыт.
На удалёнку тебя без опыта возьмут только в том случае, если будут готовы с тобой возиться. И таких работодателей есть некоторое количество. Как правило, это подразумевает какие-то подводные камни - низкая зарплата или легаси проект или что-то ещё. Это нормально.
>Надо рефрешить или юзер отозвал этот токен и надо вернуть 403?
Дебил, что у тебя юзер отозвал? Клиент идёт рефрешить токен и получает 401. Дальше логин и получение нового рефреш токена.
>Сложные вопросы, да джун, это тебе не литкод дрочить.
>Обосрался везде где можно, но продолжает корчить из себя эксперта.
То есть ты раз в минуту жестко ебешь сервис аутентификации. Миллион юзеров и все каждую минуту ломятся в одно узкое место. Да ты у мамы архитектор!
Про отозвать токен не напрягайся, это слишком сложная концепция для тебя.
>Приходится хранить список всех активных токенов, что убивает всю идею
храни только принудительно отозванные токены. одна табличка. грузишь её раз в минуту в память или слушаешь события, всё. ттл в памяти == ттл токена. потом они идут нахуй при рефреше.
ну и если памяти не хватает, то тупо фильтром блума тот же редис закрываешь
А какой фреймворк лучше учить для го? Симфони вроде для переката в джаву, а в го получается Ларавель надо учить?
17к rps невероятный хайлоад. Такую нагрузку вообще один сервер выдержать может.
>Про отозвать токен не напрягайся, это слишком сложная концепция для меня
Я тебя понял.
Вот тут я тебе не советчик, бро.
Потому, что когда я писал на пыхе, ещё даже слова "фреймворк" в природе не было.
Попробуй просто посмотри по вакансиям в твоём регионе - что больше требуется и за что больше платят. Ну, и что тебе самому больше нравится.
Симфони создавался как клон спринга из джавы, а Ларавель как клон рельсов из руби. Возможно для голанга лучше Ларавель подойдёт, чем Симфони, потому что последний рассчитан на ООП и энтерпрайз, что явно не го-вей.
Бред.
Нет, это проблема языка. Спм чзык устроен так что разработка на нём идёт сложнее чем на других
Послать его заново авторизироваться, в чем проблема? процедура авторизации включает рефреш токена, мой вопрос в том, что если ты хранишь сессию, зачем юзать JWT? Можно тогда другой токен юзать и сторить сессию, тогда ты не будешь затрачивать лишнее время цп, JWT прожорливей остальных
В самом jwt прописано время его действия. Если устарел - значит отправлять рефрешить.
Ты не в ту сторону воюешь. Мой поинт в том, что по сути jwt нахуй не нужен, это та же кука, только длинее и жрущая цпу. Это мамкин архитектор бросился защищать токен, ведь он из жопы святого гугла, поэтому безупречен. Что с токеном, что без него, один хуй надо на каждом запросе куда-то дополнительно сходить и проверить.
Хм, ну ладно, просто тейки насчет сессии вместе жвт были довольно спорные, если это не из той позиции то сорян, а так я бы поспорил, насчет ненужности, аргументво не приведу, но слышал, что хранить сессию в куках не безопасно, например я в своих проектах в оперативке храню и дэмпингую в бд, но мне кажется жвт довольно сильно разгрузил бы память за счет цп
В куках сессию не хранят. В куке хранят уникальный ключ сессии, тот же беарер, только в несколько раз короче. На сервере по этому ключу ты идешь в редис или в инмемори бд и достаешь сессию. Надо разлогинить юзера - дропаешь запись. Так было всегда, но потом гуглу припекло, что куки придумали не они, и появился токен.
Или хедер это и есть куки?
Как можно что-то хранить в хедере?
И про ключ сессии в куке он правильно сказал - так везде делают, в т.ч. в джаве ее (JSESSIONID). Если клиент куки не поддерживает - то в параметре запроса с таким же именем.
мимо
Но хранят то это не в хедере, правда? В хедере - передают.
А в куке - именно хранят, как в базе данных. Куки - они для этого.
А потом, твоя миддлвара авторизации передаёт это с сервера на клиент. А на клиенте? А обратно передать? Ну и вот.
А зачем хранить сессию у клиента? Это для того что бы при перезапуске браузера, он оставался авторизован?
Если так, то мне кажется лучше уж тогда при перезапуске спрашивать кредитионалсы, хотя в вк мне было бы неудобно...
Не сессию. А идентификатор сессии.
Хранить надо для того, что HTTP - это протокол без состояния. И каждый запрос - как в первый раз.
А не замечаешь ты этого потому, что состояние удачно имитируется. Куками, например.
> Приходится хранить список всех активных токенов, что убивает всю идею
Ты дурак что ли? Хранить надо отозванные идентификаторы сессий и время экспирации последней куки этой сессии, периодически дропая неактивные.
Время экспирации берётся или из самой куки, когда одна сессия соотвествует одной куке, или берётся некий глобальный максимальный ttl куки до рефреша (около суток).
Не важно, что именно ты хранишь, важен сам факт. Сходить туда-сюда по сети к редису занимает больше времени, чем обработка запроса самим редисом. И так надо делать на каждом запросе, нахуя тогда весь этот цирк с токенами?
сколько у тебя отозванных индикаторов? ну 2 млн в день? и допустим 16 байт на айди сессии 8 байт на таймстемп. 45МБ в памяти не уместишь?
>>3000546
>>3000164
>>3000611
>>3002243
А без jwt, на классических сессиях можно сделать так, чтобы юзер никогда не оказывался разлогинен, если регулярно посещает сайт? С jwt так можно сделать, если рефреш токен живёт к примеру 30-90 дней. При каждой экспирации аксес токена выдаётся новая пара аксес+рефреш, в итоге рефреш токен всегда свежий и можно никогда больше не логиниться если посещаешь сайт хотя бы раз в срок экспирации рефреш токена. Такой подход реализуется вообще как-либо кроме как через аксес+рефреш jwt?
Мимо посредственный код манки, никогда не работавший с классическими сессиями
Тогда тред перекатывайте своей гомокомпашкой. Мне эти конфочки не нравятся, я убрал
твои проблемы. Мы тут все не для твоих предпочтений, а комунити и всей хуйни, так что если уж кати, то кати, нормально. Или тебя там затравили, беднягу?
Охуеть, уже надо два токена. Больше токенов богу токенов!
У куки можно поставить время жизни, тогда просроченную куку браузер не будет отправлять. На сервере ты хранишь такие долгоживущие куки где-то в бд или настраиваешь редис, чтобы он сохранялся на диск.
Там сидят токсичные хуесосы-снобы. Одна ирония, сарказм и прочее говно на серьезные вопросы, как и у любых двачеебланов, птьфу.
>Там сидят токсичные хуесосы-снобы. Одна ирония, сарказм и прочее говно на серьезные вопросы,
Это говей.
Мне в целом все двачеконфочки неприятны, поэтому или перекатывайте тред раньше чем 5-7 дней после бамп лимита (лол) или идите нахуй
Не понял. Ну вот залогинился юзер, сервер создал сессию, записал айди сессии в редис, вернул на клиент куку с временем жизни 30 дней. Через 30 дней юзера выкинет из аккаунта. Как я буду рефрешить куку, при каком действии юзера?
>>3005121
>Охуеть, уже надо два токена. Больше токенов богу токенов!
Так с jwt два токена это дефолт, не? Refresh token rotation это база.
>У куки можно поставить время жизни, тогда просроченную куку браузер не будет отправлять. На сервере ты хранишь такие долгоживущие куки где-то в бд или настраиваешь редис, чтобы он сохранялся на диск.
Так после того как кука сессии просрочилась, юзера выкидывает из аккаунта, хотя он к примеру каждый день заходил на сайт. Это хуёвый UX.
>Ну вот залогинился юзер, сервер создал сессию, записал айди сессии в редис, вернул на клиент куку с временем жизни 30 дней. Через 30 дней юзера выкинет из аккаунта.
Так у тебя и с JWT токеном то же самое. Пользователь должен зайти до того как refresh токен потухнет. В любом случае надо периодически заходить. Самое долгоживущие средство это клиентский сертификат, там вообще годы.
С JWT сервер выдаёт новую пару токенов каждый раз когда аксес токен протухает, то есть по сути у юзера каждый день время жизни рефреш токена обновляется если он посещает сайт каждый день, и логиниться снова ему не нужно. А кука сессии просто протухает через назначенное время и юзера выкидывает из аккаунта, даже если он каждый день посещал сайт.
Куками ты можешь сам управлять. Сервер отдает данные с заголовком Set-Cookie, в нем можно указать время жизни. Браузер получает этот заголовок и перезаписывает куку у себя. Юзер зашел на сайт, ты ему вернул новую куку now + 30 дней, он ее сохранил (а ты не забыл сохранить куку в бд на стороне сервера). Завтра юзер зайдет - получит новую куку тоже на +30 дней и так далее. Юзер залогинен пока кука есть у тебя в базе.
Причём, оно так уже лет 25+ работает. Когда слова "json" ещё и в проекте не было. Не говоря уже про "веб-токен".
А ещё лет через пять следующее поколение будет удивляться, что, оказывается, можно веб-страничку отдать не навернув 10 микросервисов в облаке.
>Завтра юзер зайдет - получит новую куку тоже на +30 дней и так далее
В какой именно момент происходит выдача новой куки уже залогиненному юзеру, какой эндпоинт этим занимается? Вот это нихуя не понятно. В отличие от jwt, где всё сразу понятно. После экспирации аксес токена следующий запрос к апи вернёт 401 ошибку, хттп клиент на фронтенде перехватывает ответ запроса, делает запрос к api/auth/refresh, получает новую пару токенов и повторяет изначальный запрос, на который ранее вернулось 401. А когда юзер залогинен с сессией, то хз вообще когда ему выдавать новую куку сессии, при каком запросе? Какого-нибудь роута api/users/me, который часто вызывается?
>какой эндпоинт этим занимается?
Ох, блять. Я же пошутил про микросервисы. А оно вон оно чо, лол.
Ну тебе же всё написали, перечитывай, пока не дойдёт.
>Ох, блять. Я же пошутил про микросервисы. А оно вон оно чо, лол.
При чём тут микросервисы? Где я говорил про микросервисы? У монолитов нет эндпоинтов/роутов?
>Ну тебе же всё написали, перечитывай, пока не дойдёт.
Не написали как и когда обновлять куку при использовании классических сессий.
>>3006033
О том, как сделать чтобы юзера никогда не разлогинивало из аккаунта, если он посещает сайт каждый день, при этом используется подход с классическими сессиями. Бекенд выдал куку сессии на 30 дней в момент логина, 30 дней проходит, юзера выкидывает из аккаунта.
>Завтра юзер зайдет - получит новую куку тоже на +30 дней и так далее
Что значит "юзер зайдет"? Бекенд ему через Set-Cookie будет обновлять время жизни куки при запросе к любому роуту что ли?
>А когда юзер залогинен с сессией, то хз вообще когда ему выдавать новую куку сессии, при каком запросе?
При всех. Это часть пайплайна обработки запроса.
Это не создаст слишком много лишней нагрузки по сравнению с подходом access/refresh jwt? С ним обновление всего 1 раз в N минут происходит, N = время жизни рефреш токена. Ещё и редис дёргать на каждый пук.
>Это не создаст слишком много лишней нагрузки по сравнению с подходом access/refresh jwt?
На браузер или на сервер? Там один хер куча других заголовков обрабатывается.
>С ним обновление всего 1 раз в N минут происходит, N = время жизни рефреш токена. Ещё и редис дёргать на каждый пук.
Так тебе на каждый запрос надо получить атрибуты пользователя и его права для авторизации. Один хрен дёргать редис.
Если прям ссышься, то обновляй, только если половина времени сессии прошла. Или если больше часа прошло.
>На браузер или на сервер? Там один хер куча других заголовков обрабатывается.
На сервер. При наличии большого количества юзеров начиная с некоторого количества RPS сервер начнёт охуевать, возможно с не такого уж большого количества. А при jwt auth с рефрешем хоть миллион юзеров обслуживай с огромным RPS.
Ты бы давно уже взял, и посмотрел в дебаггере, как это работает на реальных сайтах, и что за говно там шлют в каждом запросе.
Да не будет ничего охуевать, это мизерная фигня по сравнением с тем, что там и так на каждом запросе происходит.
локал сторадж же еще есть
Любой сервер когда-нибудь охуеет от количества юзеров. Чтобы этого не произошло, используется шардирование. Ты берешь юзерайди из токена говоришь: у кого айди меньше 100к те идут на сервер1, 100к - 200к на сервер2 и так далее. Аналогично для куки: берешь первые несколько символов и роутишь на сервер1 для АА, сервер2 для AB и тд, буквы добавляешь сам. Роутинг происходит внутри реверс прокси (например nginx), который написан на си и охуенно быстрый.
Проблема же не в том, залогинился юзер или нет. Проблема в том, а может ли этот хуй заходить к нам в апи, и токен это не решает. Представь у тебя маркетплейс и есть апишка, через которую юзер может быстро загружать каталоги в свой магазин дилдаков. Для входа в апишку используется токен. Апишка платная, если юзер не проплатил премиум, мы должны эту фичу ему отключить, сразу же, и сразу же включить после оплаты. В итоге тебе приходится хранить список токенов и на каждом запросе проверять. Хранить надо долго, пока не протухнет рефреш токен. Спрашивается, чем это отличается от обычной куки и нахуя было устраивать цирк с токенами.
Двачую, зашёл посмотреть, там какую-то хуйню обсуждают вместо го три с половиной инвалида, нахуй такие конфы нужны. Уже проходили, вместо конструктива и помощи там будут срачи на тысячи постов от токсичных ублюдков, это же двачеры.
>Так тебе на каждый запрос надо получить атрибуты пользователя и его права для авторизации. Один хрен дёргать редис.
Деградант, съеби уже отсюда! Ты даже блядь введение не прочитал https://jwt.io/introduction
Я не он, но, я тебе скажу, что применять jwt просто для любой авторизации - это оверхед. Оно для single signon, а это далеко не всем надо.
И вообще, цель jwt - просто обмен шифрованной информацией через открытые источники. Использовать это для авторизации на обычном сайте - не очень умно. И напоминает карго-культ, как и с микросервисами в колхозном маркетплейсе.
Коллеги, такой вопрос, хочу сделать обращение во внешний сервис для получения данных, в каком каталоге лучше разместить логику запроса туда? какие бест практис?
>цель jwt - просто обмен шифрованной информацией через открытые источники
ну ты загнул, просто выдал, просто завернул, просто забайтил, просто в тираж вышел, кишки выпустил
/internal/clients/pornhub/pornhub.go
Я нигде не писал, что JWT это универсальный инструмент для всего. даже не знаю, хули тот деградант тригернулся
Мой поинт был про то, что этот иксперт постоянно пишет про свою непреодолимую тягу выпить сходить в редис. При правильном использовании JWT не требуют ходить ни в какой редис, токен самодостаточен. Именно в этом его главное преимущество. Недостатки тоже есть.
>идиот по-прежнему не понимает, зачем ведется список невалидных токенов
Мы вам не перезвоним.
Вброшу свои 2 копейки.
Я никогда не работал с jwt, никогда не было причины.
Сейчас почитал очень бегло, и (пока) не понимаю, зачем вообще это нужно? В чём главная идея? Какую проблему это решает?
Это чтобы не лазить каждый раз в базу и не искать там пользователя? А типа просто получить токен, проверить сигнатуру и время действия и разрешить/запретить? А если я спиздил токен и предъявил?
jwt можно через payload между миккросервисами пропихивать, тем самым размешая какие-то действия от пользователя, микросервис будет обращатся в отдельный сервис авторизации за пермишенами истользуя этот жвт. А иначе бы в каждом микросервисе пришлось подсистему авторизации делать
Но хуево с точки зрения что jwt распухнет со временем от инфы + вся инфа не всем микросервисам нужна, а она будет гонятся туда сюда. но можно гонять хеш, а токен хранить в сервисе авторизации.
мимо кулибин
жвт приходит с фронта
хешируется в гейтвее сервисом авторизации
из гейтвея в микросервисы толкается хеш
Мудило, ты снова выходишь на связь?
Тебя, дегроиду уже объясняли что аксес токен валиден до истечения TTL. А список невалидных токенов ведут только такие дебилы как ты.
Между своими микросервисами я бы предпочёл для подобных действий какую-то свою структуру.
В целом, этот jwt выглядит как решение в поисках проблемы.
Подозреваю, что единственная проблема, которую он реально решает, это single signon.
Это всё просто моё скромное мнение, и я ни на что не претендую.
Ну всё, тогда поняли. Логаут юзеру не сделаешь просто так, токен считается валидным, пока у него не истечет время годности. Хуйня ваш JWT.
Мне кажется, оно вообще не для этого.
Там весь смысл в том, что оно подписано. Т.е. можно передавать через третьи руки, и иметь гарантию аутентичности данных. Если тебе не надо передавать через третьи руки - эта хуита тебе просто не нужна.
>Ну всё, тогда поняли. Логаут юзеру не сделаешь просто так, токен считается валидным, пока у него не истечет время годности. Хуйня ваш JWT.
Деградант, ты по кругу здаешь одни и те же тупые вопросы:
>JWT логаут работает с задеркой в TTL аксес токена. Всё! Прими это как данность. Если в твоем магазине дилдаков нужно логаутить пользователя в течении 63 мсек, то тебе просто не подходит JWT.
И специально повторю для тупых:
>Если в твоем магазине дилдаков нужно логаутить пользователя в течении 63 мсек, то тебе просто неподходит JWT.
Ну да, придумать ТТЛ на все будущие ситуации и если что-то пойдет не так, то терпеть, пока не протухнет. Данность. Просто рабское мышление.
Буквально загуглить https://www.google.com/search?q=refresh+token+ttl и сколько упоминаний найдем что юзают ТТЛ уровня минуты?
Мне кажется, вы напрасно спорите.
Не имеет значения, какой ттл.
Важен сам принцип - хорош этот подход для аутентификации или не очень. В данном случае - не очень.
Никто не гоняет токен между микросервисами. У тебя приватная сеть, там данные ходят открыто. Проверка токена выполняется на входе в твое облако, в гейтвее, если токен невалидный, реквест дальше просто не идет.
Святой гугл не может ошибаться. Сказали два токена, значит, два токена, барин лучше знает. Ты че самый умный епта?
>Ну да, придумать ТТЛ на все будущие ситуации и если что-то пойдет не так, то терпеть, пока не протухнет.
Вся разработка состоит в том, что тебе надо предусмотреть наперед: архитектуру, стек и технологии, API, форматы данных и т.п. И ничего, как то справляются, а вот TTL токена это прям неразрешимая задача.
>>3007836
>Никто не гоняет токен между микросервисами. У тебя приватная сеть, там данные ходят открыто.
Это если ты в рога и копыта работаешь. В серьезных компаниях почти все сервисы требуют авторизации, никаких доступов кому попало.
>>3007843
>Святой гугл не может ошибаться
Ну как можно быть таким дебилом? Достаточно же открыть RFC и увидеть, что там 1 автор из Майкрософт и 2 ноунейм кампании.
Интересуют не цитаты из документации и т.п. - читать я умею, и у меня есть что.
Интересует личный практический опыт, объяснение на пальцах с каким-то реальным убедительным примером.
Просто мне этот самый контекст кажется какой-то непонятной, притянутой за уши фигнёй. Как морская свинка - ни к свиньям, ни к морю.
Как я понял, это используют, в основном, чтобы канселить что-то, особенно в конкурентной среде. А как контейнер для (контекстных) данных использовать не рекомендуют. Тогда почему это не назвали Canceller или Terminator?
Т.е., возникает ощущение, что задумывали одно, а вышло другое. Выбросить было жалко, переделывать некогда, поэтому - оставили так.
Смысл термина "контекст" мне понятен, если что. И объекты-контексты, в том или ином виде, я постоянно использую в программах на джаве. Речь именно про Context в Го.
>Тогда почему это не назвали Canceller или Terminator?
Потому что в Го всё через жопу. Таков говей.
Нет, ну контекст часто подают как одну из основных фич Го. Наряду с горутинами и интерфейсами.
И мне это совершенно не понятно. Возможно, я просто не понимаю каких-то случаев, где он реально решает.
Очевидно кто подаёт, тот и должен объяснить что в этом такого особенного.
Единственный существенный плюс который я вижу: это то что он встроенный в стандартную библиотеку и является best practices. А то в некоторых языках, всё сводится к советам создать флаг и периодически проверять его значение.
пример чего? в отличие от каналов/интерфейсов контекст это даже не часть языка, он просто лежит в стандартной либе.
это просто стандартный инструмент для реализации отмен (грейсфул шатдаунов/таймаутов) и для передачи значений выступая в роли TLS. это всё конечно можно тысячей способов самому реализовать, просто контекст - стандартный и все его используют.
https://dave.cheney.net/2017/08/20/context-isnt-for-cancellation
https://dave.cheney.net/2017/01/26/context-is-for-cancelation
Там чел пишет реально страшные вещи:
In effect context.Context is being used as a conduit to arbitrarily extend the API of any method that takes a context.Context value. It’s like Python’s kwargs, or whatever the name is for that Ruby pattern of always passing a hash. Using context.Context in this way avoids an API break by smuggling data in the unstructured bag of values attached to the context. It’s thread local storage in a cheap suit.
Т.е. он пишет, что похерить контроль типов при компиляции - это классная идея. Вот какие мы молодцы - придумали контекст, это прямо как в питоне и как в руби.
Многое стало понятнее. Например, куда делись все рубисты, лол. Они перекатились в Го. Например, главный сингапурский гошник, автор новой книги Go Cookbook - бывший рубист.
Самый прикол в том, что он подаёт такой тривиальный (и очень сомнительный) ход как ниибацца великое открытие в программировании. Я раньше думал, что мне просто кажется, что гошные гуру просто нихуя не умеют программировать. Теперь начинаю понимать что нет, не кажется. У них там свой мирок, их время от нашего отстаёт лет на 35, примерно. Курят план-9, наслаждаются жизнью. Завидую им.
>Т.е. он пишет, что похерить контроль типов при компиляции - это классная идея
чел ты жопой читаешь? если не можешь в английский, заюзай переводчик - гугл или чатжпт.
во всей статье негативный сентимент, как и в абзаце, который ты привел. с тем же блять аргументом про контроль типов при компиляции:
>We’d have gone from an explicit compile time dependency to an implicit run time dependency, one that could not be enforced by the compiler.
Вот оно что, оказывается. То есть, это был сарказм.
А я охуел от таких заявлений, и дальше просто не читал, лол.
Щас почитаю.
У меня сложилось впечатление, что эти особенные пытаются изобрести DI контейнер, но не могут сформулировать свои мысли. Зато деревья крутятся, код мутится.
ну и нахуй тогда ваш говноланг нужОн??? Лучше уж как деды как джаве
Ну, вообще-то, именно с DI per se проблем в Го никаких нет.
В смысле - интерфейсы позволяют инжектить куда угодно любую хуиту, которая крякает, как утка.
Другой вопрос, что этого, обычно, не делают (в том смысле, в каком это делают в DI-контейнерах на джаве), ибо, считается, что это не кошерно.
Подозреваю, что суть того, что в Го непопулярны решения a'la джава в том, что тут всё заточено на агрессивную конкурентность. И, соответственно, во многих местах либо стейтлесс или запрет копирования. А в спрингах-хуингах просто море стейта везде, и всё переплелось-перееблось.
Я именно таких объяснений не встречал пока, но, полагаю, что интуиция у хардкорных гоферов работает примерно так.
Добавлю ещё, что штуки типа DI-контейнеров - это зависимости. И достаточно объёмны. А в Го принцип такой, что лучше похерить DRY чем тащить даже маленькую зависимость со стороны. И в этом есть своя сермяжная правда, если вдуматься. Потому, что обратный подход можно наблюдать в node.js или в том же спринге. И выглядит это просто отвратительно.
>https://dave.cheney.net/2017/08/20/context-isnt-for-cancellation
>https://dave.cheney.net/2017/01/26/context-is-for-cancelation
Хуйня какая-то.
Понятно что, контекст не надо использовать для вещей которые критчны для функции. Такие вещи надо передавать явно, аргументом. Но при этом вполне нормально передавать там вспомогательные вещи - например информацию для трейсинга или некая контекстная информация типа айди запроса.
Я же говорю - если передавать данные в контексте это антипаттерн, то нахуя, спрашиваетя, называть это контекстом? Ибо если это контекст, причём не конкретный контекст, а вообще какой угодно, то в нём должны быть данные. Иначе это не контекст, а что-то другое.
Поэтому, от этой фичи я сразу почувствовал запах.
Выглядит как грязный хак для отмены хттп запросов, который потом решили обобщить и назвали громким названием.
Хотя, я допускаю, что эти разговоры про "данные в контексте = антипаттерн" - это для дурачков-джуниоров из гугла, которые, если дай им волю, все параметры запихнут в контекст, и будут очень горды собой.
>Я же говорю - если передавать данные в контексте это антипаттерн, то нахуя, спрашиваетя, называть это контекстом? Ибо если это контекст, причём не конкретный контекст, а вообще какой угодно, то в нём должны быть данные. Иначе это не контекст, а что-то другое.
Потому что контекст, предает не данные. Неожиданно правда?
Контекст передает контекст выполнения. Вот есть у тебя функция которая читает ищет и возращает из базы что-то. Критери поиска и DAL к базе это параметры этой функции. А еще у функции есть контекст, это откуда и когда эта функция была вызвана. Например контекст это информация о том, что функцию вызвали для обработки запроса /user/123 и айди реквеста 48391999-85aa-4ac6-955f-5459220ed60d - это контекст. Контекст не критичен для работы функции и может отсутствовать, например в юнит тестах. А параметры всегда должны передаваться. валидация параметров на nil это отдельная тема. Контекст можно использовать для логгирования, например по айди реквеста удобно отследить что вообще происходило с запросом.
>>3010559
>это для дурачков-джуниоров из гугла, которые, если дай им волю, все параметры запихнут в контекст, и будут очень горды собой.
В гугле запрещено самостоятельно что-то в контекст класть. Есть библиотеки которые туда кладут данные для трассировки то о чем я выше писал, но самому нельзя.
>контекст предает не данные
>туда кладут данные для трассировки
То есть, всё-таки данные. Ну и правильно. Иначе это никакой не контекст.
И, потом, это не же называется ExеcutionContext или какой-то ещё узко-специальный контекст. Значит, можно передавать то, что считаешь нужным, в разумных пределах.
Вообще, я постоянно обращаю внимание на то, что нейминг в Го - это очень большая проблема. Называют вещи просто хуй пойми как. Отсюда и километровые комментарии к функциям из трёх строчек. Где параметр называется просто 'a', а потом тратится 20 слов, чтобы объяснить, что же это такое на самом деле. И это у них считается бест практисиз (а у нормальных людей - лютый антипаттерн)
А я, наоборот, к неймингу отношусь весьма ответственно и придирчиво. Потому, что если слова не имеют под собой почвы, то дела не могут совершаться. Ну и самодокументируемый код, опять же - большое дело.
ну смотри, в одной статье он высказывается против передачи зависимостей вроде логгера в контексте, которые можно передавать явно.
во второй - чтобы контекст стал просто хранилкой значений и не занимался лайфтаймом.
т.е. твои трейсАйди/реквестАйди ложатся в контекст вполне.
вторая статья намеренно спорная. обоснования такие, что трудно различить дедлайн/кенсел и трудно дождаться полной отмены всего и захватить ошибку после отмены. да и вообще thread-local storage и отмены ортогональны. поэтому нужно декаплить контекст от лайфтаймов (и придумывать что-то новое на подобие tomb). часть проблем решается уже сейчас - например возможность передать ошибку в отмену контекста.
>Значит, можно передавать то, что считаешь нужным, в разумных пределах.
При написании функции надо исходить из того, что в контексте ничего нет. Надо функции что-то логгировать? Логгер должен передаваться явно в параметрах или хранится в типе для функций с ресивером. Контекст это способ добавить дополнительную информацию в функцию про которую функция ничего не знает и не должна знать. Конечно есть соблазн там еще кучу всего передать, но это прям сильно ухудшает читаемость кода, рефакторить становится очень сложно.
>>3010601
У него вообще как-то не очень сформулирована его претензия к контексту. Я вот не понимаю зачем надо дожидаться что горутина закеселилась и самое главное какой результат он ждет после этого.
>добавить дополнительную информацию в функцию про которую функция ничего не знает и не должна знать.
Можно какой-то пример? Потому, что тут совершенно явное противоречие.
Единственное, что могу представить я - это когда эта функция должна передать контекст дальше, не заглядывая в него.
Вообще, это всё выглядит как какой-то случайный грязный хак, который зачем-то решили обобщить, и который теперь выглядит как решение в поисках проблемы.
Я думаю, что если у столь многих людей по поводу этой хуиты постоянно возникают одни и те же вопросы, на которые нет ясных ответов, значит это именно что хуита. Я видел посты ещё 17-года, где люди писали, что в Го-2.0 этой хуйни быть не должно, лол.
>У него вообще как-то не очень сформулирована его претензия к контексту. Я вот не понимаю зачем надо дожидаться что горутина закеселилась и самое главное какой результат он ждет после этого.
ну я тоже не особо понимаю. думаю, он хочет сделать err := cancel() и продолжить выполнение, когда все горутины вышли (т.е. по сути как errgroup). ну и т.е. этот юзкейс по сути вейтгруппами/errgroup решается.
>Можно какой-то пример? Потому, что тут совершенно явное противоречие.
>Единственное, что могу представить я - это когда эта функция должна передать контекст дальше, не заглядывая в него.
Например добавление айди запроса в логи: https://blog.gopheracademy.com/advent-2016/context-logging/
код можно и поизящнее сделать, но идея понятна
>>3011007
>ну я тоже не особо понимаю. думаю, он хочет сделать err := cancel() и продолжить выполнение, когда все горутины вышли (т.е. по сути как errgroup). ну и т.е. этот юзкейс по сути вейтгруппами/errgroup решается.
Зачем после кэнсел ждать завершения горутин, я не понимаю. Наступил таймаут - кэнсельнул все горутины, вернул ошибку и все. А если какой-то код не обрабатывает правильно кэнсел или завис? Вызов API так и будет висеть, ни таймаут еррор ни результатов?
То есть, как я и говорил - контекст просто передаётся в другую функцию, не глядя.
На мой взгляд - это лютая хуйня и антипаттерн.
Потому, что, во-первых, убирает проверку типов.
А во вторых - порождает неявные зависимости.
Короче - истинный го-вей - говно, палки, подводные камни.
Напоминает Руби в его лучшие годы.
Кстати, где он?
Потом была Кложура, на которую все дрочили до кровавых мозолей, писали километровые восхищённые посты, ахали и охали.
Там тоже революционные подходы к конкурентности. Причём, в отличие от Го - действительно революционные. И где она сейчас?
Я на Маннинге в 2017 купил книжку Clojure, The Essential Reference, по программе MEAP (Manning earty acess programm). Т.е. ты покупаешь недописанную книгу и потом получаешь обновления. Книга охуенная, просто кладезь информации по стандартной библиотеке. И сейчас она на 99% дописана. И что в итоге? MEAP начался в 2016-м (!) сейчас - 2024. И дописана до конца эта книга не будет. Такие дела.
Сик транзит глория мунди.
Я думаю, что Го окажется примерно там же.
Собственно, он уже отправился в путь.
Чтобы не потерять данные. Например, случается кансел на этапе, когда клиент получил подтверждение успеха, а бд отъебнула. Горутина продолжает ожидать пока раздуплится под с базой, удерживая всю программу от шатдауна. Если код завис, значит ревьюер мудак и его надо опустить по зп, а может и в жопу По хорошему, надо тогда хоть в логи плюнуть, что там зависло на n-минут после канселя, а потом уж выбрасывать принудительно.
Контекст для переменных действительно говно, но вон фронтовики лакомятся редаксом и им даже нравится. Голанг имеет очень приятную асинхронщину, но уйдёт на помойку истории совсем по другим причинам.
С чего бы го куда-то уходить? Нахуй вы в тред приходите и срете о том какой хуевый язык, что он умрёт и прочее, идите на хуй, заебали.
> То есть, как я и говорил - контекст просто передаётся в другую функцию, не глядя.
> На мой взгляд - это лютая хуйня и антипаттерн.
> Потому, что, во-первых, убирает проверку типов.
> А во вторых - порождает неявные зависимости.
ну да, это антипаттерн. все разрабы понимают. если ты хочешь такую хуйню завести, то до тебя у нас точно доебутся на ревью, потому что со стандартами компании расходится. у нас есть некоторые штуки которые допустимо завозить через контекст (вхождение юзера в АБ-тест например). но в общем у нас не принято даже логгер в контекст пихать, не то что какие-то вещи влияющие на бизнес-логику. (аб-тесты влияют, но ограничены временными рамками, их всегда спиливают потом).
>истинный го-вей - говно, палки, подводные камни
да. тут инжиниринг, а не кодерство и дроч на охуенные абстракции. вся суть чтобы сделать максимально просто с минимумом абстракций, т.к. абстракции это подводные камни еще большего уровня.
и поясню
инжиниринг - это решить задачу максимально поддерживаемо
кодерство - решить задачу хоть как-то, даже с использованием ахуенных абстракций, не запариваясь о поддерживаемости
программирование - решить задачу супер-оптимальным способом, не запариваясь о том, что кто-то разберется в итоге
>да. тут инжиниринг
>т.к. абстракции это подводные камни еще большего уровня.
Ну, в этом есть своя правда.
В джаве часто бывает пребор с абстракциями, и это выходит боком.
На пхп, очевидно. Без троллинга.
Кложуристам, в своё время, платили просто конские деньги примерно там же. Возможно, и сейчас платят кое-где.
Рубистам тоже, кое-где, платят довольно много. Потому, что написали на рельсах просто хуеву тучу всего. Даже на Jruby можно найти вакансию в Москве, если поискать хорошенько.
Понятно, что в Го вложены конские деньги, гугол есть гугол.
Поэтому, вряд-ли он просто исчезнет в обозримом будущем.
Но, то, что год от года его всё меньше и меньше рассматривают как язык общего назначения - это очевидно.
Тут ещё такая штука, я думаю - компьютеры стали очень быстрыми, и памяти очень много. И то, что 15 лет писали бы на C[++] - теперь пишут на питоне. Я имею в виду не веб, а просто программы. Поэтому в "быстррм" Го потребности просто нет. А чтобы заменить C++ - он не настолько быстрый, и с абстракциями туговато, и стд. библиотека - так себе. Поэтому - остаются сетевые утилиты и штуки вроде докеров-куберов.
>Чтобы не потерять данные. Например, случается кансел на этапе, когда клиент получил подтверждение успеха, а бд отъебнула. Горутина продолжает ожидать пока раздуплится под с базой, удерживая всю программу от шатдауна.
Очевидно что надо начинать пиздить того, кто написал такую логику. Система должна вначале записать в базу, а потом уже выдавать подтверждение пользователю.
И в целом это не дело горутины решать, ждать или нет. Пришёл кэнсел - остановили обработку, откатили транзакцию и всё.
>На мой взгляд - это лютая хуйня и антипаттерн.
>Потому, что, во-первых, убирает проверку типов.
>А во вторых - порождает неявные зависимости.
>Короче - истинный го-вей - говно, палки, подводные камни.
Ок, расскажи как ты будешь протаскивать айди запроса через весь стек вызовов? С учётом того что часть кода это фреймворк.
Ладно, я признаю, что немного переборщил.
В java ee сервлетах тоже есть request scope, куда можно пихать разное, но, там это выглядит естественно, как часть системы.
Основная претензия была, скорее, в том, что оно всё шито белыми нитками. Понятно, что это такой язык, и что контекст появился позже, и нормально внедрить его в библиотеку уже было нельзя и т.п., но, всё равно раздражает.
А вот как тебе эта фишка, что если ты используешь контекст с cancel или с таймаутом, то надо обязательно вызывать cancel() в конце, даже если всё прошло нормально (чтобы освободить ресурсы)?
Не, я даже догадываюсь зачем - чтобы ты явно обозначил, что на момент выхода из функции отмена уже ни на что не влияет. Но, всё равно, такая нелогичная хуита очень раздражает.
Сравнение с go https://vlang.io/compare#go
Список софта https://github.com/vlang/awesome-v
>компьютеры стали очень быстрыми
А всё уже, халява кончилась. Закон Мура больше не работает. У квантовых компов прогресс очень медленный. Вот в статье рассматриваются пути выхода https://www.science.org/doi/10.1126/science.aam9744
Короче, те, кто сейчас делает ставку на быстрый софт, выиграют в будущем.
>Закон Мура больше не работает
Прохладная история из 2007 года, только это не значит ровным счетом нихуя, это просто эмпирическое наблюдение. Про будущее у софта тоже смешно, у всего того кода что сейчас пишется никакого будущего нет, есть только решение проблем в настоящем, здесь и сейчас, языки программирования устаревают очень быстро, программы на них написанные выкидываются целиком и переписываются на новых модных языках, через 15 лет твой код даже не соберется потому что не найдется библиотек подходящих версий в поставке операционной системы, и проще будет переписать всё с нуля чем ковыряться в говне мамонта, это нормальный жизненный цикл программного обеспечения, у него есть свой срок эксплуатации, в какой-то момент всё неизбежно будет выброшено и забыто, старпёры все говорят как один - на занимайтесь преждевременной оптимизацией "на будущее", потому никакого будущего у всего что мы пишем нет.
Ты сейчас описал мусорные стартапы и петушиные галеры, которые эти стартапы обслуживают. В продуктовых компаниях до сих пор живет код на джаве хуй знает какой версии, из дотнета до сих пор используются древние WinForms и WebForms. У крупных игроков уровня яндекс вообще все свое и в рот они ебали айти моду.
Это называется глобальная переменная. В терминах DI - это scoped lifetime service. В том же сишарпе ты создаешь интерфейс типа IRequestContext со свойством RequestId, ставишь его как scoped, на входе в обработчик инициализируешь и потом просто инжектишь везде, где нужен реквест айди. Все просто и понятно и не надо передавать какую-то хуйню по стеку вызовов.
Ну и какое будущее у программы на WebForms? Готов поспорить, разрабы думали над архитектурой, применяли различные оптимизации, не ленились, считали микросекунды, может даже тестами всё покрывали, но что в итоге-то?
>Ну и какое будущее у программы на WebForms?
Учитывая, что она до сих пор жива?
Блестящее, я думаю.
самый легкий путь да, через стажировку без опыта без смс. ну т.е. проходишь там го тур и пробуешь. в самом языке особо нечего учить (точнее дохуя познается только на реальном опыте и от стажера не ждут). поэтому параллельно можешь учить другой язык, чтобы был запасной аэродром, потому что второй легкий путь - свичнуться мидлом. (или через полгода на другую стажировку пройти.) ну и "без опыта" не означает что ты про го вообще нихуя не знаешь - как мапы/слайсы устроены и что такое горутины наверняка спросят. а про нетполлер/обработку сисколов/ГЦ возможно нет.
аноны, живу и учусь в ростове на дону. сейчас обучаюсь на 3 курсе, т.е. через 1.5 года уже выпуск будет. подумал, что хватит мне вола ебать, надо думать о будущем. из вводных - изучал только питон и плюсы по учебе, знаю(л) норм, особенно плюсы. запреметил вот платформу 1с, но я хз как вкатываться, время еще есть, а вакансий хуй да нихуя, только начиная с мидлов иногда что-то встречается. я правильно понимаю, что единственный шанс на вкат мне только какая-нибудь стажировка в тинькофф, и то, если пройду?
>Но, то, что год от года его всё меньше и меньше рассматривают как язык общего назначения - это очевидно.
Как ты это определил? Мне вот не очевидно, мимо не гошник
Я определил это читая интернеты.
И глядя на даты постов.
А ещё вот тут, например, в комментах есть несколько исторических экскурсов:
https://news.ycombinator.com/item?id=38872362
>Поэтому в "быстррм" Го потребности просто нет
Поэтому озоны, авито и прочие маркетплейсы да и не только массово на него переезжают? Даже в ВК пояились вакухи.
Озон просто купил компанию с гошниками, а шарп в то время был для винды только. Теперь там .NET/Go вместе, никто не собирается дотнет выпиливать полностью.
Я имел в виду не для веба, а для "обычных" программ.
Да и для веба, далеко не всем нужна топовая производительность.
Большинству - не нужна. А нужна быстрая и недорогая разработка.
Кстати, я совсем не против Го, наоборот - за.
В Озоне - чего только нет.
Там в платёжной системе даже изрядный кусок на 1С используют, чтоб ты знал.
Смех-смехом, но, такое вполне возможно.
Для 1С можно писать плагины на шарпе или крестах. Ну, а там уже - ассемблерные вставки, лол.
А в Озоне это используют не для реал-тайм платежей, а где-то в кредитной части, подробностей не знаю.
>Все просто и понятно и не надо передавать какую-то хуйню по стеку вызовов.
Просто и понятно пока твоя DI магия работать как ты ожидаешь. А если твоя горутина получит не свой контекст, то ты хуй разберёшься почему если вообще заметишь жто.
Загугли паттерн Команда. Просто посмотри, делать так не надо, это ООП. Как надо - сам догадаешься.
Кстати, с удивлением узнал, что википидоры называют паттерны "шаблонами". Прямо пахнуло прелой совчиной, лол.
Мимо неудачный вкатун в android kotlin, вакансий 0
Питухон.
Также соснёшь. Голенг для сенек из-за кучи подводных. Стартуй с пыхи, если надо быстро, или с жабы, если есть время.
Ахаха, привет несостоявшийся коллега.
Я тоже проебался с выбором профессии, 1 год своей жизни потратил в пустую в андроид разработку, задрочил kotlin, xml и compose верстки, hilt, retrofit, mvvm, sqlite и все равно никому нахуй не нужен. Я даже себе 1 год опыта нарисовал в ноябре чтобы хоть как-то попытаться вкатиться в это говно. Но везде одни отказы блять.
Благо я хоть на другой работе, не связаной с it зарабатываю 140к и жить хоть как-то можно.
Я тоже решил перейти на бэкенд и рассматриваю Go, но чет, читая этот тред, всё совсем печально в плане выбора Go первым языком для бэка.
Андроид - это с самого начала был плохой выбор.
Даже если бы нашёл работу, это было бы какое-нибудь днище.
Алсо - если ты действительно постиг Котлин (хотя-бы отчасти), то Го должен пойти нормально. Бек-хуек - это не важно. Язык - это язык.
Тем не менее, задачи на беке другие. И (как я уже писал тут пару раз) - могу посоветовать в качестве начального упражнения Питон - Flask или FastAPI. Просто чтобы язык не путался под ногами. Также - базовое знание питона лишним в принципе не будет. Одно умение писать утилитарные скрипты для себя - стоит очень многого.
И, кстати, почему не джава? После андроида и котлина?
>Андроид - это с самого начала был плохой выбор.
Почему? Разве разработка мобильных приложений не является очень востребованной?
>Встроенной функции для удаления элементов среза нет, но эту операцию можно выполнить с помощью диапазонов и функции добавления
Э-э-э-э...
МЯУ, но я реально шарю вглубь, только всем похуй. Год серого опыта у меня. Последний собес проходил, в техническом плане хорошо отвечал, вопросы были несложные, но послали нахуй с единственной пометкой: "мало опыта"
Тебе буквально осталось выучить бд, спринг и пойти в любую компанию где упоминается java/kotlin.
Рассмотрю такой варик, а пока думаю пойти за нищие 30-45к в техподдержку на халтурку одну, там работать по времени мало надо, эта тема с тестировкой и девопсом связна чутка, мб в это вкчусь параллельно. В свободное время подготовлю накрутку опыта в android и буду туда траить, ну и на крайняк бэк с жабой, хотя я не люблю жабу и бэкенд. Мне нравится именно на Kotlin писать и верстать на compose, да, я охуевший.
Да, с Котлином всё ок. Думал в Го вкатиться, но видишь, тут же пишут что для первой работы никому нахуй на нем не нужен.
А по поводу Питона, читал на многих ресурсах что он хорош только для аналитиков и МЛщиков. Для бэка это хуйня (не моё мнение)
>он хорош только для аналитиков и МЛщиков
Это полная хуйня. Полнейшая.
Обоссы того, кто тебе это сказал.
Стало очень много инфоцыган и дураков в этой теме, реально противно.
Серверы на питоне делали за 20 лет до того, как появилось ML-говно. И ещё больше делают сейчас. И скорость там вполне сопоставима с Го (который тоже не C++).
Но, речь была даже не об этом.
А о том, чтобы почувствовать, что такое сервер-сайд разработка, причём, с минммальными затратами. А дальше сам разберёшься. Не хватит скорости - перепишешь на го.
Ну и скрипты, конечно же.
Сетевые и не-сетевые утилиты, и прочее.
А так же GUI несколькими способами.
А так же дёргать сишные либы с минимумом затрат на это.
Питон - охуенен.
А ML-говно просто фильтруй.
Чел спросил про шаблоны как там обрезать строку, я дал ссылку на доку как пихнуть в шаблон кастомную функцию. Это стандартный подход в вебе с хелперами в шаблонах
Бля, я уже заработался реально.
И слово "в шаблоне" в исходном комменте просто не заметил, лол.
>Серверы на питоне делали и скорость там вполне сопоставима с Го (который тоже не C++).
Хуя ты серишь. В режиме single query:
1. Django - 18,355 rps
2. Gin - 185,337 rps
>Django - web framework
>Gin - web framework
Видишь, одно и то же, значит Го в 10 раз быстрее Питона, совсем тупые, не понимаете что такое rps? Requerst Per Second.
Дада, логика такая примерно.
Понятно, что Го быстрее.
Только в 95% случаев это не имеет никакого значения вообще.
Насколько он быстрее, чем последняя версия FastAPI - хз. Но, пидантик сильно ускорили в последних версиях, как я слышал.
Но, такую хуитку, которую на питоне ты напишешь за вечер не глядя, на го ты будешь писать хз сколько.
Реальные бенчмарки зависят от задачи. RPS - хуйня вообще. Затык обычно в бд или в бизнес-логике.
Вот тут интересная дискуссия на эту тему:
https://www.reddit.com/r/golang/comments/u5squc/golang_vs_fastapi/?rdt=60057
>Серверы на питоне делали за 20 лет до того, как появилось ML-говно. И ещё больше делают сейчас. И скорость там вполне сопоставима с Го (который тоже не C++).
Чел...
https://web-frameworks-benchmark.netlify.app/compare?f=gin,fiber,chi,echo,fastapi
>>3017418
>Реальные бенчмарки зависят от задачи. RPS - хуйня вообще
Наверное latency намного важнее, да?
2 года веслаю на хрусте, до этого 1,5 года руби/пхп макакой и по-мелочи набирается претензий.
Основные это макросы и кодогенерация много всякого говна делается в компайл тайме в итоге много где ныряя посмотреть как работает код библиотеки окунаешься в нечитаемое говнище и приходиться пиздовать куда-то в гит репозиторий читать ишью таких же бедолаг.
Управление зависимостями тоже пизда https://crates.io такая же хуета ебучая помойка что и npm частично даже одни и те же люди делали, каждая микрописька тянет с собой вагон микрописек, в итоге чтобы сказать hello world в микросервисе на axum ставиться 90 крейтов. Нормальные имена библиотек заняты васянами с хэлоувордами. В итоге всё выглядит как полная параша.
И вакансии это пизда, либо криптохуйня, либо госконторы, которые слушают сеть и мониторят соцсети думаю понятно что мониторят или клепают БПЛА думаю понятно какие и для чего, еще там у провайдеров бывает всякое, но там часто нужны рокстары-помидоры 10+ лет опыта, которые окаменелое говно мамонтов с крестов переписывать будут. Крипта ебучая хуйня написанная на коленке, я туда окунался на полшишечки между делом и такого количества говна я повидал, плюс там каждый молодежный NFT-стартап помирает через год выплачивая ЗП своими токенами пока живет, относительно нормальных проектов с перспективой там с гулькин хуй. Вообще живут именно валюты бтц, эфир и тд, а остальное всякое говно для стрижки лохов инвесторов. В итоге годных вакансий довольно мало.
Смотрю в сторону go, вроде суть примерно такая же, также почти всё руками пишешь, также ошибки руками обрабатываешь, также все вокруг структур, но с другой стороны всё как-то проще. А все шутки про if err!= nil {return err;} от тех кто ни писал ни строчки, ide это о одно if понимает и особо не замечаешь. Но количество нормальных вакансий это просто небо и земля, почти всё продуктовые компании пишущие джсономешалки.
Вот собственно интересуюсь какие подводные?
>или клепают БПЛА думаю понятно какие и для чего
ХОТЕТ. Скинь пожалуйста ссылку на вакансию. Я хочу ебать, давить, петушить, хуярить, топтать хохлов, если за это ещё будут деньги плотить, так вообще песня. Работа мечты.
Зачем делать что-то на медленном старом языке, когда есть супер быстрый новый? Зайдет на твой сайт 100к человек одновременно, Питон пукнет и обмякнет, а Го переварит и еще попросит, клиенты довольны и какая экономия на серверах, на оперативной памяти? Огромная.
Вот такие регулярно попадаются https://hh.ru/vacancy/8953095618
Но скорее тебя будет петушить товарищ майор и дадут тебе запрет на выезд
Тебе уже писали, что рейт запросов умножается на нуль бизнес логикой и хуёвыми сикуэлями. Голанг не про монолитные приложения с логикой. Голанг про микропенисы уровня хочу какать, какою. Пилить на нём что-то сложное, есть ошибка архитектуры приложения.
Это пока тебя не пригласят бумажку подписать в кабинете у товарища майора. Тут и случается самое веселье с запретом выезда за границу в течении 5 лет после увольнения и прочие плюшки гостайны
>Это пока тебя не пригласят бумажку подписать в кабинете у товарища майора.
Моя первая работа такая была, нашел чем удивить. Я правда АЭС занимался, не военкой.
мне кажется на гошке и монолоит можно написать, какая собственно разница то? вон куб 2 ляма строк и ничо
Мы не знаем всех подробностей этой разработки, вполне вероятно разрабы работают вахтами на этом проекте, поочередно уезжают на реабилитацию в психиатрическую клинику по мере внесения правок в код.
Чел, модульный подход ничем не хуже ООП. ООП это opinionated блаж. C модулями тоже пишут монолиты. Пример питон джанга, руби рельсы. А голанг еще и статически типизирован из коробки. Голанг хуже только в том плане что нет большого фреймворка
Если Голенг ничем не хуже, а даже лучше из-за дрочки типов, то почему на нём еще нет своей джанги и рейлс?
1) Не модно уже. Сейчас модно ставить пакеты. С DI любая васянка превращается в фреймворк.
2) Высокоуровневый и так. С стандартной либе готовые компоненты от фреймворка.
Джанга и рельсы загибаются потихоньку, сейчас рельсы и руби в целом почти никто не использует, а на петухоне всяки FastApi популярны вместо джанги. Сейчас как раньше не нужно генерировать кучи страниц на бекенде, а достаточно выплюнуть json. В гошке почти всё для этого есть из коробки.
>Сейчас как раньше не нужно генерировать кучи страниц на бекенде, а достаточно выплюнуть json.
Ну хуй знает, вон сча хайп на go + htmx + templ, когда мне нужно какой-то простой сайт накидать, я его быстрее на фласке/фастапи с жинжей сделаю, чем отдельно ещё буду под это дело фронт разворачивать.
Нуу, модели, валидации, has_many belongs_to ассоциации, простенький ORM, роутинг, работа с кешэм (на уровне фрагментов страницы, на уровне извлечения данных), каскадные удаления с отработавшими коллбэками, возможность подключать разные базы данных и связывать данные из них на логическом уровне, какой-нибудь простой шаблонизатор с поддержкой лейаутов (служебные страницы намного проще отдать в виде готового html, чем парсить json на клиенте), модуль авторизации\аутентификации, возможность выкинуть долгий запрос в отдельный воркер, со стороны сервера уведомлять клиента о статусе этого воркера через вебсокеты, ну базовые круды что-то вроде generate crud zlupa чтобы инструмент разворачивал бойлерплейты и не писать эту шелуху самому, поддержка миграций для базы данных конечно же, накатить\откатить, возможность зашифровать\расшифровать данные для безопасного хранения, по-моему абсолютно базовые вещи для веб-разработки.
Это когда в одного пишешь там да проще на каком нибудь MVC а для отправки формочек жиквери, а в продуктовой команде бек пишут одни, фронт другие, а разворачивают третьи.
>почему на нём еще нет своей джанги и рейлс?
Потому что для этого, нужно использовать рефлексию, много рефлексию. А это не говей.
>рефлексия не го-вей
Но почему? В чем проблема рефлексии? Это же логично, мощно, удобно, это инструмент, который сделал серьезный шаг вперед и открыл новые горизонты, да, местами не быстрый, но отказываться от него по каким-то надуманным "не го-вей", просто абсурд.
выкатываюсь из рубипараши спустя десять лет, ибо заебало, думаю вкатиться в го или раст.
В расте нет работы, но язык интересный и можно писать любую хуйню, в то время как на го работы много, но язык кал by design.
Есть аноны с опытом раста и го? Мнения?
> модели, простенький ORM
С одной стороны это все хорошо, но как только начинается чуть большее чем обычный CRUD, то пизда. Я помню в рельсах бывало частенько кто-то наебывался с 1+1. А всякие хитрые запросы приходилось писать в ActiveSupport::Concern используя по сути тот же sql, но костыля методами orm, пиздец как бесило, тебе нужно одновременно хорошо знать sql и orm и додумывать в голове что оно там построит. Оно еще не всегда оптимально запросы строит, например иногда вместо джойнов лучше сделать подзапросы я уже не помню почему у меня это не получалось в рельсах. Я помню там еще был пиздецкий запрос который получал все записи и потом гонял по циклам, тот кто его писал не до конца понимал что он делает, там еще было обернуто бизнеслогикой короче не сразу заметно, а с sql это более очевидно, я выкинул большую часть кода и переписал на sql простенький запрос в пару сотен строк который работал в раз 20-30 быстрее, продажница получала свою эксельку за пару секунд вместо минуты.
Для простеньких задач да, согласен, проблематично руками писать и хочеться какую-нибудь ORM. Короче всё по задачам
>валидации
Один хуй сам пишешь исходя из безнеслогики
>has_many belongs_to
>каскадные удаления с отработавшими коллбэками
>возможность подключать разные базы данных и связывать данные из них на логическом уровне
На голом sql ты это всё напишешь более подробно и более детально можешь все сделать
>роутинг
Да, в рельсах элегантное, тут много писанины, согласен
>с кешэм (на уровне фрагментов страницы,
> какой-нибудь простой шаблонизатор с поддержкой лейаутов
Не нужно, задача выплюнуть json клиенту и он уже там пусть ебется
>служебные страницы намного проще отдать в виде готового html, чем парсить json на клиенте
Ебальник треснет у них, пусть верстают на своих реактах, буду я ещё тут пиксели ловить и так их толпа целая по 3 часа друг другу дрочат на митингах как правильно компонент написать чтобы красиво было в итоге открываешь с телефона и один хуй всю верстку попердолило
>модуль авторизации\аутентификации
Почти везде jwt есть библиотека и наду всего пару строчек кода, а всё остальное в специальном sso сервисе который имеет свою базу и покрыт тестами. В рельсах на старой работе также был отдельный сервис для авторизации и самописный гем для работы с ним
>возможность выкинуть долгий запрос в отдельный воркер
Кидаешь в очередь и также воркер обрабатывает, отличие от того же sidekiq в рельсах что придется дополнительно разворачивать воркер, хотя на сколько я помню под него у нас тоже контейнер был. Код точно также пишешь и там и там.
>со стороны сервера уведомлять клиента о статусе этого воркера через вебсокеты
Ни разу с ними не работал, думаю тоже реализуемо
>ну базовые круды что-то вроде generate crud zlupa чтобы инструмент разворачивал бойлерплейты и не писать эту шелуху самом
Это да, не хватает иногда, в рельсах прикольно было крудошлепить
> поддержка миграций для базы данных конечно же, накатить\откатить
Тоже есть, только пишешь сразу голый sql
>возможность зашифровать\расшифровать данные для безопасного хранения,
Всё есть
Короче как я понял тебе не хватает фронтенда, нормальной orm и кодогенерации, это да нету. Остальное всё есть просто немного по-другому
> модели, простенький ORM
С одной стороны это все хорошо, но как только начинается чуть большее чем обычный CRUD, то пизда. Я помню в рельсах бывало частенько кто-то наебывался с 1+1. А всякие хитрые запросы приходилось писать в ActiveSupport::Concern используя по сути тот же sql, но костыля методами orm, пиздец как бесило, тебе нужно одновременно хорошо знать sql и orm и додумывать в голове что оно там построит. Оно еще не всегда оптимально запросы строит, например иногда вместо джойнов лучше сделать подзапросы я уже не помню почему у меня это не получалось в рельсах. Я помню там еще был пиздецкий запрос который получал все записи и потом гонял по циклам, тот кто его писал не до конца понимал что он делает, там еще было обернуто бизнеслогикой короче не сразу заметно, а с sql это более очевидно, я выкинул большую часть кода и переписал на sql простенький запрос в пару сотен строк который работал в раз 20-30 быстрее, продажница получала свою эксельку за пару секунд вместо минуты.
Для простеньких задач да, согласен, проблематично руками писать и хочеться какую-нибудь ORM. Короче всё по задачам
>валидации
Один хуй сам пишешь исходя из безнеслогики
>has_many belongs_to
>каскадные удаления с отработавшими коллбэками
>возможность подключать разные базы данных и связывать данные из них на логическом уровне
На голом sql ты это всё напишешь более подробно и более детально можешь все сделать
>роутинг
Да, в рельсах элегантное, тут много писанины, согласен
>с кешэм (на уровне фрагментов страницы,
> какой-нибудь простой шаблонизатор с поддержкой лейаутов
Не нужно, задача выплюнуть json клиенту и он уже там пусть ебется
>служебные страницы намного проще отдать в виде готового html, чем парсить json на клиенте
Ебальник треснет у них, пусть верстают на своих реактах, буду я ещё тут пиксели ловить и так их толпа целая по 3 часа друг другу дрочат на митингах как правильно компонент написать чтобы красиво было в итоге открываешь с телефона и один хуй всю верстку попердолило
>модуль авторизации\аутентификации
Почти везде jwt есть библиотека и наду всего пару строчек кода, а всё остальное в специальном sso сервисе который имеет свою базу и покрыт тестами. В рельсах на старой работе также был отдельный сервис для авторизации и самописный гем для работы с ним
>возможность выкинуть долгий запрос в отдельный воркер
Кидаешь в очередь и также воркер обрабатывает, отличие от того же sidekiq в рельсах что придется дополнительно разворачивать воркер, хотя на сколько я помню под него у нас тоже контейнер был. Код точно также пишешь и там и там.
>со стороны сервера уведомлять клиента о статусе этого воркера через вебсокеты
Ни разу с ними не работал, думаю тоже реализуемо
>ну базовые круды что-то вроде generate crud zlupa чтобы инструмент разворачивал бойлерплейты и не писать эту шелуху самом
Это да, не хватает иногда, в рельсах прикольно было крудошлепить
> поддержка миграций для базы данных конечно же, накатить\откатить
Тоже есть, только пишешь сразу голый sql
>возможность зашифровать\расшифровать данные для безопасного хранения,
Всё есть
Короче как я понял тебе не хватает фронтенда, нормальной orm и кодогенерации, это да нету. Остальное всё есть просто немного по-другому
>Есть аноны с опытом раста и го? Мнения?
На раст не советую идти, там реально с работой туго и зарплаты особо не отличаются.
С работой в целом или в России? Я рассматриваю международные компании в основном
Рефлексия медленная. Если в рельсах и джанге, это не так заметно из-за того что сам язык не очень быстрый, то в го это будет сильно заметно. В жаве эту проблему решают кодогенерацией, но в го нет такой опции. Можно статитически генерировать код во время билда, но это сложно. Проще гошников заставить писать бойлерплейт код, они привычные.
Рефлексия ненадежная. Где-то не так назвал, не тот регистр и всё упадет в рантайме.
Медленная настолько что гошка превращается в питон?
Почему все время только одно считается истинным?
Если писать на го то только микросервисы и только хайлоад со всеми кафками, di плохо, не нужно,а копипастить трудно тестируемые портянки зависимостей хорошо
На западного барина крипта в основном, а РФ в госконторах и опсосах. Можешь сам поизучать.
Большая часть того же докера ни какой скорости требования не предявляет. Никто не создает контейнеры миллион раз в секунду. Тем не мение докер целиком на го написан
Сервис в монолите может браться через DI, это не значит что у тебя каждый реквест будет замедлятся DI. Сам сервис может эффективно обрабатывать запросы.
>Медленная настолько что гошка превращается в питон?
Не превращается, но в мире го заметная. Тут момент в том, что го в основной выбирают те, кому важен перформанс/ггц и 99 персентиль. Конечно если в го насыпать сахару, проложить рельсы, на нём начнёт писать Веб Студия Сокол, но это не цель го. Комьюнити не поддержит.
>Почему все время только одно считается истинным?
>Если писать на го то только микросервисы и только хайлоад со всеми кафками, di плохо, не нужно,а копипастить трудно тестируемые портянки зависимостей хорошо
Это идеологический вопрос. Авторы го предложили такую парадигму вначале, потом сформировалось комьюнити которое это поддержало/приняло. И теперь это самоподдерживающийся тренд. В го идут те, кто любит писать много кода и топит за явные зависимости, минимум абстракций и т.п. А те кто любит convention over configuration идут в руби и питоны.
> Сейчас как раньше не нужно генерировать кучи страниц на бекенде, а достаточно выплюнуть json
Как там в 2016? Htmx ещё не взлетел? Graphql пока не изобрели?
Ваще похуй. Айти это про делание платного софта, а не красивости.
Вообще в ахуе честно говоря с динамики отрасли, пыха была модная, ушла, рейлс был модный, ушел, нода была модная, ушла, гошечка наша любимая модная, но где гарантии что через месяц её не похоронят? Никаких.
Надо уметь вкатываться в тренды
Битриксо-вордпресы и прочее цмс говно это основная масса которое пилят подвальные студии по всему миру, вот это и есть пхп.
Всякие нормальные symfony задыхается, а Yii и zend сдохли. На плаву только laravel те же рельсы, но и то он дошел до пика популярности и потихоньку вниз сползает, мне кажется его ждет судьба рельс.
>Думаю перекатиться из Rust какие подводные?
1) Гугл стремится напихать зонды https://opennet.ru/58639/
2) Невозможно собрать программу с зависимостями без подключения к интернету. То есть когда все зависимости программы уже скачаны, то при создании новой программы с подключенными зависимостями go ломится в интернет вместо того, чтобы брать уже скачанные из кэша.
>Управление зависимостями тоже пизда
>каждая микрописька тянет с собой вагон микрописек
По-моему, такая ситуация у всех языков, для которых облегчено скачивание зависимостей, включая go. Ручное скачивание зависимостей неудобно, но зато люди бы больше задумывались перед тем, как что-то подключать.
>Невозможно собрать программу с зависимостями без подключения к интернету. То есть когда все зависимости программы уже скачаны, то при создании новой программы с подключенными зависимостями go ломится в интернет вместо того, чтобы брать уже скачанные из кэша.
Если это проблема, то можно поднять свой прокси на локалхосте и пусть ломится туда.
>Гугл стремится напихать зонды
Это все надо добровольно и самостоятельно включать, не хочешь, не включай. Но оптимизация рантайма будет идти на основе собранных данных. Если у тебя специфический юзкейс например система аллоцирует много слайсов на десятки мегабайт и ты не отправляешь данные - нехуй ныть, что под тебя не оптимизируют рантайм.
Ну и в целом, это нормальная практика. И Оракл и Майки собирают данные о том как исползуют джаву и дотнет. Более того, если у тебя крашнулось приложение это норм практика прислать саппорту хипдамп. В котором, на минуточку, есть все данные приложения. А не просто счетчики как в телеметрие от гугла.
>1) Гугл стремится напихать зонды https://opennet.ru/58639/
Ваще похую, я даже удивлен что они этого не сделали ещё.
>2) Невозможно собрать программу с зависимостями без подключения к интернету.
Тоже не проблема, я же не на полярной станции в Антарктиде собираюсь работать
>По-моему, такая ситуация у всех языков
Нет, тут именно подход как в js качаются разные версии одной и той же зависимости, много где будет ругаться что версии друг к другу не подходят. Плюс всякие стандартные штуки тянутся из сторонних зависимостей, например для рандома сторонний rand, для работы с асинхронностью tokio и очень часто к нему futures, для жсонов serde и многое другое.
Тоже думаю пощупать, также спиздил с рутрекера и удивился как в первых лекциях говорят про гит и линукс. Потом чел рассказывает про синтаксис, на благо быстро как раз для перекатывающихся. Но наверное в этот поток не вкачусь, пока условий и времени нет, буду пробовать летом-осенью если будут.
Но, разве сериализация-десериализация json делается не через рефлексию?
В смысле - она же везде в микросервисах - и всё нормально.
Собственно вопрос это нормально ли, там реально есть какой-то планировщик?
А после строки log.Fatal(err) оно в панику не упадет?
А как вы делаете красиво в продакшене?
Забыл уточнить, я использую "database/sql" из коробки, БД постгрес
Чел не тупи причем тут вебсервер. Тут надо понимать как работает постгря. Она на каждый коннекшен поднимает всю свою трихомундию заново. Для работы с ней используют менеджер который пул коннекшенов поддерживает, потому что сама постгя не имеет такой штуки. Обычно эта хуйня есть в любом драйвере любого языка.
мимо
>Ты вообще понимаешь, как работает веб сервер?
Что тебе нужно рассказать, задавай вопросы.
Для пхпшников тред в другом месте, если что. В нормальных языках где запущенное приложение не умирает каждый раз, на каждый реквест не делается коннект к БД, а используется уже существующее подключение. Потому что само подключение это очень дорогая операция и на стороне БД там под капотом много всего делается.
>Так открой капот и посмотри.
Так отвечают когда не знают ответа лол. Я открывал, этот метод визуально выглядит как-будто бы подключение с нуля, создается коннектор и пошло-поехало и чат гопота похоже мне напиздела. Вот и интересую как и что.
>С чего ты взял, что в го не так?
Кто говорит что в го не так, шиз? Я и спрашиваю как эта хуйня работает и вообще хотел узнать как в продакшене у гоферов делается, но мне начинают писать всякие залетные пхпшники вкатуны за каким-то хуем, которые нихуя не знают.
>>3025505
Бля, нашел в чём сосбтвенно проёб. Эта хуйня мне нахуевертила выше объявление переменной var db *sql.DB и нижу по коду вместо того чтобы присвоить значение объявляла новую db из-за двоеточия.
db, err := sql.Open("postgres", connectionString)
Короче переделал и в итоге получился синглтон с коннекшеном, теперь заебись в логах БД не создается подключение.
Но тем не менее вопрос о том как это грамотно делается в продакшене остается открытым
>log.Fatal
>return nil, err
нахуя
>чтобы конекшн к БД был в модели, чтобы не пробрасывать через 3 пизды через контроллеры
ну так мы не делаем. бд (пул коннекшнов) инжектится в сервисный слой в main(). хз как это на джавособачьем.
>нахуя
гпт такую хуйню написала, уже попробовал, панику дает
>бд (пул коннекшнов) инжектится в сервисный слой в main().
Это как? Есть пример какой-нибудь на гитхабе?
Чувак, этих примеров - как говна за баней.
И в интернетах, и в книгах.
Но, судя по тому, что ты используешь Искусственного Идиота - результат тебе не очень нужен, тебе нравится сам процесс.
Да сериализация JSON, XML работает через рефлексию. Но тут надо понимать что выбора особо нет. Если у тебя нет заранее написаной схемы, по которой можно сгенерировать структуры gRPC, OpenAPI, XSD передают привет, то кроме рефлексии у тебя нет выбора. При этом например в Java, есть варианты скомпилировать это в байткод, который затем JIT преобразует в нативный код.
А вот с DI у тебя выбор есть, можно написать чуть побольше кода и не использовать рефлексию вообще, или только во время инициализации и это говей. Конечно можно сделать что-то типа рельс, но это не говей и скорее всего проекты будут избегать пользоваться этим.
Ситуация такая, что вокруг каждого языка сложилась своя платформа, ниша, подход к разработке, набор инструментов, и т.д. И большинство библиотек фреймворков его придерживаются, просто чтобы ими пользовались, в код контрибутили, и т.п.
Пиздец ты у мамки архитектор. Пулом конекшенов управляет драйвер бд под капотом, ты просто каждый раз вызываешь open и не паришься.
Хз насколько правильно это (моя первая и пока единственная работа на го), но мы на проекте пробрасываем вот такой синглтон бд в структуру с бизнес логикой и оттуда уже с ним работаем и все, никаких изысков
Так все делают, в других языках тоже. Есть интерфейс DbConnection с методами Query и т.д. Есть интерфейс Database с методом Execute, который принимает лямбду с аргумантом DbConnection. Этот Database внутри Execute подключается к бд и управляет транзакциями, чтобы не писать Commit/Rollback сто раз в бизнес логике. DbConnection пробрасывается по стеку вызовов, это правильно, так сразу видно, где мы используем бд. Сам Database является синглтоном и инжектится через DI.
СУБД не говей, SQL весь перформанс на ноль делит, в итоге программа на Питоне и на Го работает одинаково медленно, где in-memory key-value хранилища?
Высокая производительность это оптимизация хранения данных в первую очередь, маня, а потом уже язык и всё остальное, если ты из Го дёргаешь портянки джойнов в Постгрес с единой базой и единой точкой входа, то ты просто дурачок каргокультист, который повторяет за большими дядями и ведётся на всё модное, но как и зачем дела делаются - понятия не имеет.
В реальных задачах, не в литкоде дроченом, даже джаваскрипт работает с той же скоростью, что и компилируемые языки. Особенно в микросервисах, где джейсон по сто раз ездит туда-сюда по сети. Поэтому в штатах нодежс мегапопулярна, а на супербыстром расте пишут только авторы раста.
Матешу не прогуливай.
Всё так, ботлнек на сеть и на доступ к данным это два якоря веб-разработки, не важно насколько язык быстр и насколько пиздат код, программа большую часть времени простаивает, ожидая, пока данные пройдут через систему хранения и сетевой стек.
харош кукарекать goвноед максималист
твоё инмемори хранилище может пиздануться и потерять все данные навеки вечные
software engineering это всегда трейдофы
пиздеть про то что ЭТА ЛЮЧЕ ПАТАМУШТА БЫСТРА!!!! могут только ебанаты фанбои без реального опыта разработки
используем инмемори для кеша, для персистенса и транзакций используем субд
Думай, ребёнок
спешите видеть, школьники goвноеды itt на своём хуёвом велосипеде докатились до рассуждений о io bound/cpu bound вычислений
>ЭТА ЛЮЧЕ ПАТАМУШТА БЫСТРА!!!!
Так это девиз голенга, дрочить попугаев в синтетике, о чем ты говоришь?
Что вы там на цпу вычисляете на голенге? Вместо СУБД среднее арифметическое подчитываете?
Зачем Авито считает протеины?
По идее мы сначала запускаем две горутины и ждём в цикле пока они отчитаются в цикле по done. Первая горутина, которой достанется поток выполнения, проиграет, т.к. на этот момент канал battle ещё пуст, и она сможет в него записать. После этого она сразу же записывает своё имя в канал done ждёт main. Дальше заходит горутина-победитель, читает имя проигравшего и ждёт, пока main освободит для неё канал done, занятый первой горутиной чтобы отчитаться о завершении.
То есть по моим соображениям формат вывода всегда должен быть следующим:
Language1 lost
Language1 is done
Language2 beat Language1
Language2 is done
Однако на практике это не так, и на выводе в случайном порядке пишется то сначала победитель, то сначала проигравший. Объясните, что я упускаю?
В догонку к вопросу: откуда может браться такой вывод я вообще не понимаю. Допустим, поток исполнения меняет горутину между селектом и записью в канал. Это объясняет, почему done выходят в рандомном порядке. Но ведь кейс победителя в select не может отработать до кейса проигравшего. Как тогда возможен такой порядок строк?
ну я могу предположить что почти всегда последний язык будет проигравшим, т.к. шедулится первым. а в каком порядке оно напечатается, тут хз, потому ты там еще 4 сискола делаешь.
сохраняй вывод в строку и печатай после завершения. еще можно сделать gomaxprocs=1 или debug.setmaxthreads и прочекать насколько поведение стало воспроизводимым.
>ну я могу предположить
Вот тут:
https://scanlibs.com/concurrency-in-go/
пишут, что горутина может даже вообще не запуститься.
Т.е. нельзя делать вообще никаких предположений такого рода.
Надо просто всё синхронизировать.
>>3027082
Это не пример, а какая-то хуйня.
Читай книжки (см. выше).
>пишут, что горутина может даже вообще не запуститься.
ага, а программа может не выйти, зовите тюринга. горутины синхронизированы с main через канал. всё тело горутин до отправки в канал включительно будет выполнено. вейтгруппа-хуюппа больших гарантий в этом кейсе не даст.
>вейтгруппа-хуюппа больших гарантий в этом кейсе не даст.
WaitGroup - это, как я понимаю, идиоматический способ ждать завершения всех потоков, именно чтобы не колхозить done и прочее.
Вообще - пример полное говно. Потому, что ничего не иллюстрирует. В то время, как есть куча классической инфы по теме, написанной умными людьми.
>ну я могу предположить что почти всегда последний язык будет проигравшим
хотя короче да, потестил 10к запусков и в этом кейсе это не так - примерно 50/50 исходы. я бы так упростил пример, чтобы избавиться от сисколов https://go.dev/play/p/ph9Qone5Wm8
тогда можно попробовать объяснить: первой почти всегда запускается пыха, идет в селект и видит, что никакой из кейсов не доступен, добавляется в recvq и sendq канала и засыпает. просыпается горутина с гошкой и псевдорандомно выберает кейс в селекте, т.к. оба кейса доступны.
если добавить каналу буфер - https://go.dev/play/p/SY8m9hMM7bU - будет видно, что в 99% первой запускается пыха. (т.е. из 10к запусков порядка 9980 выигрышей у пыхи, которая отправляет в канал и выходит).
Я всё равно не понимаю, откуда берётся рандом. Мы проходимся в цикле, первым элементом является Go. Создаётся горутина с Go, в селекте она может только записать, т.к. канал ещё пуст. После этого main читает из done и вторая горутина не успевает завершиться. В моём представлении это должно работать так. Планировщик что ли в случайном порядке выбирает горутины?
>Планировщик что ли в случайном порядке выбирает горутины?
До тебя, я вижу, начинает потихоньку доходить.
Потом, глядишь, начнёт доходить, почему конкурентность это сложно, и зачем пишут все эти книги.
https://github.com/golang/go/blob/master/src/runtime/proc.go#L6621
когда ты делаешь go func(), горутина не запускается, а просто кладется в runnext переменную - следующую горутину на выполнение.
если в runnext уже есть горутина, то она уходит в локальную очередь и в runnext у записывается новая созданная горутина. т.е. последняя созданная горутина выполняется первой, а потом в очереди создания. но это в теории, когда у тебя есть только один P - так то еще глобальная очередь и воровство горутин есть.
>>3027169
В concurrent среде выполнения есть только одна гарантия: никаких гарантий.
Нельзя делать никакие предположения по твоему коду, когда код выходит за границы 1 потока (в твоем случае ты запускаешь несколько корутин). Что запустится первым, что последним, что в процессе выполнения засаспендится - никаких гарантий.
Именно по этой причине придумали всякие акторы и прочие future'ы
>>3027169
если ты про то, что в 0.2% случаев горутины все равно в неожиданном порядке выполняются - ну тут я походу без GOMAXPROCS=1 запускал, а так пыха на 100% у меня пока выходит. если бы это были более длинные горутины, то еще GODEBUG=asyncpreemptoff=1 может понадобиться - хз насколько детерминированно sysmon горутины усыпляет.
шедулер в целом хуевертит как хочет, поэтому максимум вероятностные суждения можно сделать. и не факт, что в другой версии гошки это не поменяют или что-то еще.
Ты бы, лучше, эту энергию потратил на что-нибудь более полезное.
Например - на изучение go memory model.
Ты упускаешь принципы работы операционной системы. Система переключает потоки в случайном порядке.
@
Создал пакет
@
Импортировал в 100500 проектов
@
URL пакета поменялся
@
Прогоняй 100500 проектов через файнд унд репласе
Наркоманы бля...
Ну в случае если у нас GOMAXPROCS=1, операционная система ничего не переключает, т.к. поток всего один, насколько я понимаю.
Чтобы выполнялось в одном потоке, убери go в строке 23.
Да у меня самого личные репозитории зеркалируются
с GOMAXPROCS=1 потоков тоже несколько может быть. если у тебя тред собирается заблочиться на сисколе, например файл с диска прочитать, то P отходит другому треду. после этого порядок исполнения уже не гарантирован - например у тебя головка ЖД может две секунды отлипать.
хотя он и до этого не особо гарантирован
Их не просто несколько может быть.
Их может быть сколько угодно. Особенно горутин.
А порядок исполнения может быть совершенно чётко описан формулой как бык поссал
ну если ты запустишь сколько угодно go func(){runtime.LockOSThread();select{}}(), то их будет сколько угодно. а так их несколько
ну то есть берешь и смотришь. на сервисе 400к рпм. 20 тредов и 1к горутин в пике. их может быть сколько угодно, но их не сколько угодно
Ну, тот чувак очень упрощённо понял эту тему.
Типа сделал 1 процессор, значит будет один поток.
А на самом деле - совсем не один. И даже не 2-3. А дохуя.
Плюс еще как минимум на линуксе нетворк поллер на отдельном треде висит.
И что за фигня у тебя в самом начале цикла fоr?
И надо было написать, что является входными данными.
Алсо - надо было на https://go.dev/play/ залить и прислать ссылку.
1. main должен быть почти пустым, функционал должен быть вынесен в функции, с возможностьб подменить все входные данные для тестов.
2. Не ебу, но выглядит как будто тебе надо
reader = csv.NewReader(...)
reader.Comma = ' '
Но похуй.
3. В 26 строке лучше будет вывести позицию где ошибка и опционально проблемное слово. Выводить ошибки принято в stderr и с помощью log.
4. У тебя при ошибке парсинга в 28 строке в num будет 0. Ты или [хочешь log.Panic, или добавить continue в обработку ошибки
5. В 28 строке потенциальный выход за границу массива с паникой. Мб count_arr должен быть маппой, мб не хватает проверки на границы num.
Могу приебаться к именам переменным ещё. Но это за меня сделает линтер - возьми golangci-lint и погоняй его.
Бля, после года в своей микросервисной галере, пиздец как отвык от простенького кода в main, решающего задачку. Чет расслабился имея работу, пойти что-ли литкод подрочить...
И ещё раз тебе скажу - начинать надо с формулировки проблемы.
Типа - мой код должен делать то и это, оцените как получилось.
Потому, что в очень многих случаях люди пишут даже довольно неплохие программы, просто они решают немножко не ту задачу, которую требовалось решить.
Задача работает, хотелось критики чисто по структуре, т.к. пишу на другом языке. Но добавлю описание, спс.
Вам требуется написать проверку корректности количества кораблей на поле, учитывая их размеры. Напомним, что на поле должны быть:
четыре однопалубных,
три двухпалубных,
два трёхпалубных,
один четырёхпалубный.
Вам заданы 10 целых чисел от 1 до 4. Проверьте, что заданные размеры соответствуют требованиям выше. Гарантируется, что кораблей на поле ровно 10 и их размеры 1-4 включительно
Сори что в несколько сообщений. Сраный двощ, со своим сраным спамлистом
С именами переменных беда конечно, s, v - букв не хватает на клавиатуре? read_line это действие, валидное название функции, но не переменной, reference - кейворд из раздела указателей, вводит в заблуждение относительно сути своего содержимого, иди дрочить стайлгайд кароче.
>>3029925
нихуя не понял. что за первая строка? почему она не читается? не нашел в алгоритме чтобы вертикали учитывались, если задача про валидацию расстановки в морском бою. где проверяется что кораблей десять?
хотя бля вроде разобрался. типа нужно убедиться, что на каждой строчке четыре "1", три "2", две "3" и одна четверка?
ну я бы так поправил https://go.dev/play/p/yF1bKvzInG5 . на самом деле не особо от твоего варианта отличается.
если ридер принимать на вход функции, то легче поддержать разные типы ридеров (поменять StringReader на файл или io.Stdout). если бы это был какой-нибудь адвент оф код, то я бы даже забил на вынос парсинга отдельной строки в функцию и тестировал полный инпут всегда.
а в рил лайф сценарии счетчик скорее бы в мапе был, а не в массиве. ну просто потому что в общем случае значениями не интовые размеры кораблей выступают, а какие-нибудь строки.
ну я там проебался немножк конечно ищите лохи))
>С именами переменных беда конечно, s, v - букв не хватает на клавиатуре?
Но, разве не таков говей?
В стдлибе такого очень много, причём, в таких местах, где нормальные люди постеснялись бы.
Ты ж не в стдлиб пишешь.
>>3026152
>>3026158
>>3025834
Спасибо, анончики, всяко перепробовал, короче сам пришел к такой архитектуре в main создаю коннекшен, а дальше через DI проборасываю в контроллеры и все красиво получается без костылей.
>>3025960
>Чувак, этих примеров - как говна за баней.
Я просто хотел тот самый пример, которой прям go way, который завещал бородатый седой дядька отец основатель. А на гитхабе только говно за баней разной степени всратости.
>Но, судя по тому, что ты используешь Искусственного Идиота - результат тебе не очень нужен, тебе нравится сам процесс
Пока да только процесс, потыкаюсь еще недельку другую может быть и на результат пойдет если понравится
У них там всё хорошо?
Онлайн-собесы идут у бесов?
gin
panic(err)
Go away
джава уже пресытилась
кабан заставляет писать на котлине, а я не хочу(
У хохлов айти уже закончилось, по 800 отзывов на вакансию, но ебанутые продолжают пилить видосики на свиномове.
Завезли range для интов, цикл от 0 до n-1. Хотел побомбить от того что сделали такое половинчатое решение, но уже даже не хочется. Походу становлюсь гофером.
Что, так сложно было сделать итерацию по произвольному диапазону, а не только 9...n-1 ?
А нахуя? Когда и зачем ты последний раз писал for i := 9; i < n; i++
Рубист
1. Это нужно таким деградантам как ты, которые обратный цикл без ошибок не могут написать.
2. Неделю назад писал
for i := k; i <= n; i++
Ну и обратные тоже нужны бывают.
Ты просто туповат и не понимаешь, что язык это инструмент для большого количества разработчиков. И тут аргументы типа мне не надо, это хуевые аргументы.
Go - это не язык решения задачек на литкоде, а в первую очередь инструмент для решения бизнес-задач.
Если бы ты не был дауном, то мог бы понять, что rangefunc итерирует существующие типы, а не любую рандомную хуйню. Как ты изобразишь произвольный диапазон синтаксически? range (10, 100)??? [10..100]??? 10 100??? В любом случае получится нечто несуществующее в языке.
Если ты настолько тупой, что не в состоянии написать for ;;, то можешь прямо сейчас написать функцию RangeInt(a, b int) []int и итерироваться по ней сколько хочешь.
В питоне обычно рендж как раз и крутят не с нуля, в этом его фишка - диапазон каких-то значений, а если у тебя с нуля, то это обычный for-each и тащить range смысла нет.
>то можешь прямо сейчас написать функцию
Почему бы разрабам не написать эту функцию и не включить в библиотеку, раз уж выкатывают какую-то фичу? Типа мы делаем колесо, ну как в модных языках, но колесо будет не круглым, а квадратным, но вы можете сами ножичком почикать вот так чик-чик-чик и будет похоже на круглое. Интересные решения конечно.
>В питоне
Пошел нахуй
>Почему бы разрабам не написать эту функцию
Потому что пошел нахуй, даун. Напишешь сам если нужно, не сломаешься. Щас бы всякое говно в стдлиб тащить ради инвалидов, которые 3 строчки написать не могут
>Как ты изобразишь произвольный диапазон синтаксически? range (10, 100)??? [10..100]??? 10 100??? В любом случае получится нечто несуществующее в языке.
Ох блядь! Вот же нерешаемая задача современности, придумать синтаксис для range! БЛЯЯЯЯ! Как же её решить, а?! Ну никак ничего не придумывается!
>>3038783
>можешь прямо сейчас написать функцию RangeInt(a, b int) []int и итерироваться по ней сколько хочешь.
Спокуха, уже и так ясно что ты тупой, не стоит дальше упирается в демонстрации этого. Предложить аллоцировать слайс на пару миллионов элементов, чтобы тупо проинтегрироваться от 1 а не 0. Это очень гениальное решение.
Даунище...
ну затащат итераторы и сделаешь себе рендж прям как в петоне чтобы в целых двух местах его заюзать
сколько мютексов на картинке?
Скриптопарашный рендж - мощнейшая шутка, особенно при работе с датами, но здесь ничем таким даже не пахнет к сожалению, от ренджа одно только название почему-то.
я про range over function https://github.com/golang/go/issues/61405, который в 1.22 не завезли.
>Хуесос, про каналы не слышал?
Ебать даун. Ты вообще представляешь сколько всякой синхронизации и рид/райт барьеров происходит при записи/чтении из канала? Не говоря уже о том, что никаких инлайнов и прочих оптимизаций в таком коде не будет.
>представляешь
Имаджинировали ебало дауна, который рассуждает о перформансе вместо того, чтобы сделать бенчмарки и понять, что обсрался и пора обтекать?
Во первых ты дебил, который думает жопой. Твоя говноидея с каналом требует создания и запуска отдельной горутины. И любому здравомыслящему человеку ясно что это жрёт память на порядок больше, даже чем итератор, не говоря уже про for. Во вторых досрочно эту херню можно остановить только закрыв канал, что вызовет панику. В третьих перформанс каналов давно забенчили и он херовый https://syslog.ravelin.com/so-just-how-fast-are-channels-anyway-4c156a407e45
Это случаем не ты всем мозги ебал с асинхронностью в растотреде? Ты свой там софт на микроволновке запускаешь?
>Ох блядь! Вот же нерешаемая задача современности, придумать синтаксис для range! БЛЯЯЯЯ! Как же её решить, а?! Ну никак ничего не придумывается!
На самом деле внести новую синтаксическую конструкцию в существующий язык довольно сложно
Sup, я 24 летний вкатун самоучка (без вышки) и хочу знать какая стратегия лучше для вката:
1) Продолжать писать код и дрочить сети, SQL, инфру и после основ спамить резюме везде
2) Просто гриндить литкод 24/7 по гайдам Neetcode и участвовать во всех стажках бигтеха
Пет-проект делай, имиджборду на микросервисах, захости на сервере, с деплоем и тестами, с мониторингом, чтобы было похоже на настоящее приложение, тогда хотя бы видно будет что ты на уровне студента что-то делаешь, а литкоды и чтение документации это тупиковая залупа которая тебя никуда не приведет.
Почему ИЛИ? В 2024 тебе надо и то и другое. Еще и софтскиллы не забудь. И сверху еще один ЯП на уверенном уровне, чтобы не сочли за slow learner’а. Не забудь еще взять курс по системному дизайну заодно.
Ну и как вишенка на торте: гитхаб с несколькими интересными СВОИМИ проектами.
И я сейчас не шучу.
А ты думал все так просто, щенок ебаный?
мимо вкатился в Ит в 13 лет и уже давно выгорел
>Просто гриндить литкод 24/7 по гайдам Neetcode и участвовать во всех стажках бигтеха
Ты путаешь кодинг с программированием. Программирование - это больше чем просто писать код. Программирование - это процесс. Он включает планирование архитектуры, создание интерфейса, тестирование, деплой, техподдержку после. Мало просто сделать программу, которая выдаст два + два = четыре. Нужно чтобы эта программа была дешевая, стабильная, расширяемая, поддерживаемая, быстрая, удобная, имела нормальную документацию и приносила пользу. Мало просто решить головоломку, нужно чтобы этим кто-то пользовался. Код которым никто не пользуется - это бесполезный код.
>Продолжать писать код и дрочить сети, SQL, инфру и после основ спамить резюме везде
НЕ НАДО НИЧЕГО ДРОЧИТЬ. Делай то что будет приносить пользу. Не нужно жить по принципу "а вдруг чёнибудь пригодится". Если тебе это не нужно здесь и сейчас, скорее всего не пригодится вообще никогда.
Не я. Лучше по сути написал бы.
>>3041579
>На самом деле внести новую синтаксическую конструкцию в существующий язык довольно сложно
Тут не нужен какой-то сверхъестественный синтаксис. Итераторы есть во всех современных языках. Проблема только в говей, видите ли Го не может завязываться на какой-то интерфейс. Отсюда этот уебищнешая реализация итератора по коллекции.
Го таковым не является
Просто выбери самый простой вариант: смотришь требования на вакансии, учишь буковки, проходишь собесы, перекладываешь легаси говно от забора до обеда. Ебанатов, которые требуют литкод и петпроекты на гитхабе, просто посылай нахуй, и без них вакансий полно.
В каком-то из соседних трендов видел что gambling это зашквар для резюме, ну и на очко присел немного
Хз, сам сейчас устраиваюсь в такую контору мидлом, но не в рф. Платят дофига, еще и релоцируют. Имхо, все разговоры о том, где работать зашквар а где нет- хуйня. По-моему мнению работа в госухе это зашквар. Работа на впк это зашквар. Но тем не менее, у меня есть знакомые которые работают или работали и там и там, и у них нет проблем с поиском дальнейшей работы.
Ты сам сказал, что откликался на всё подряд. Чему ты удивляешься.
Казино и вся эта залупа - всё равно что наркотики продавать, да, люди сами несут бабки, но это всё не совсем адекватно и добровольно, не далеко такая работа ушла от оператора колл-центра службы безопасности сбербанка, вымогающего деньги у пенсионеров, люди пострадают от твоего труда и с каждой строчкой такого кода мир становится более ублюдочным местом, нужна ли такая работа? Мне кажется что нет, та же работа в госухе - попытка навести порядок так или иначе, а гемблинг это однозначно зло, без вариантов.
Да это промытка очередная с творржком вместо мозга
>>3042611
>>3042632
Здесь нет однозначного ответа, что лучше а что нет. В программировании полно неоднозначного дерьма. Всякие накрутки, порнуха, гемблинги, крипта и т.д. С одной стороны, ты участвуешь в этом косвенно. Меня как-то просили сделать интернет-магазин с ношенными женскими трусиками. Это же не я продаю свои трусы? Конечно если тебе неприятно, ты можешь вообще не упоминать об этом в резюме. Но с другой стороны, будет совесть давить. Типа а как же там невинные овечки которых наёбывают в казино? Поэтому здесь фифти-фифти. Что тебе важнее? Высокая зп и грязная совесть или средняя зп и чистая совесть.
Привет, анон, подскажи, а что такого вы пишите, что у вас такие огромные нагрузки? Какие проекты пилить? Где бизнесу выгоден ваш этот Go ?Кажется, что это язык только бигтеха и подражающих ему
>>3042604
ну тебя максимум могут спросить, когда ты уже собесы прошел и смотрят на фит в команду. просто отвечаешь что нужны деньги были/помутнение рассудка/сожалеешь раскаиваешься извиняешься в церковь ходишь каждое воскресенье. да на самом деле вообще похуй. через пять лет думаешь какой-то нормальной конторе не похуй будет что чел пять лет назад был в конторе ставок?
если вот прям не хочешь, то хотя посиди еще полгода, с полным годом устроиться попроще должно быть (это я выдумал, но наверное в реальной жизни работает).
Огромные нагрузки появляются у дебилов, которые не могут в шардирование. Там, где достаточно сайта на пхп, ебанаты лепят 100500 микросервисов а потом гоняют терабайты джейсона туда-сюда. Классический пример - маркетплейс. Достаточно каждому клиенту выдать свою базу, но нет. Мы сделаем одну гигабазу для заказов, другую гигабазу для товаров, а потом сидим охуеваем от нагрузок, когда все юзеры лезут в одну точку отказа.
Архитектор мамкин
одного джейсона должно хватить каждому юзеру!
лол
Двачую. Тоже с этим столкнулись, предыдущая команда зачем-то завезла го, ща там связка го + реакт. Хотим переписать на монолит рельсы + хотвайр. Проект - еком
да вообще все это выглядит как излишняя сложность. Мы же не гугел, не яндекс, не озон, значит и нагрузок нет и все проебы с ответов больше 2сек - значит мы где-то проебались, не учли или забыли индекс вот и все.
>Огромные нагрузки появляются у дебилов, которые не могут в шардирование
Шопифай кстати так и делает, 75.9 миллионов rpm на неповоротливом руби он рейлс приложении, проблема масштаба в вебе решается штатно даже в однопоточных блокируемых скриптопарашах.
>тебя максимум могут спросить, когда ты уже собесы прошел и смотрят на фит в команду
Как раз наоборот, херочка будет смотреть твою резюмуху где работал и что делал. Хер его знает как она к казино отнесется. Может у нее брат от этой хуйни умер.
А на калчерал фит, уже на резюме не смотрят, могут конечно спросить что делал или почему пошел, но ты им уже скорее нравишься, чем нет. И если не рассказывать, что ты любишь найобывать людей, то в этот момент всем пофиг.
At First I Was Like
>Огромные нагрузки появляются у дебилов, которые не могут в шардирование.
But Then I Was Like
>Там, где достаточно сайта на пхп, ебанаты лепят 100500 микросервисов
о вы из англии?
>what we got right
Первый же пункт - маскот, ололо. Не устану повторять: люди выбирают ЯП по маскоту и синтаксису, добро пожаловать снова. Теперь буду для усиления эффекта тыкать этой цитатой пайка.
>Первый же пункт - маскот, ололо.
Да там весь спич точно такой же. Послушать пайка, так немного с комьюнити неправильно работали, в документации было мало примеров, какую-то стандартную библиотеку криво написали, а в остальном всё прям заебись вышло. Никаких проблем в языке или рантайме нет.
Ну он с самого начала перечислил все реальные пиздецовые косяки (систему типов, обработку ошибок, стандартную либу и т.п.) и сказал, что типа уже столько про это написано, что я на этом не буду останавливаться. (клоун-эмодзи.пнг)
>и что приходится везде писать бойлерплейт if err != nill
Гулагерам такое только в радость! Если тебе не нравиться писать if err != nil то ты не настоящий гулагер. Иди в сишорп.
Gorilla mux
>>3026060
Есть еще такое, https://github.com/mailru/easyjson, но там кодогенерация по заранее известной схеме (зато + перформанс).
херкам не похуй? им нужно вакухи закрыть. "челик 4 года экспириенса, еще и с вышкой? ну может на сеньора в эту команду пройдет, позвоню". или все сложнее?
меня как раз на финале/калчефите спрашивали есть ли какие-то продукты где я не готов работать типа ставок. ну я ответил, что вообще похуй, если все честно/добровольно/со смазкой. контора вообще не про ставки. офер получил, принял на грудь
>херкам не похуй? им нужно вакухи закрыть. "челик 4 года экспириенса, еще и с вышкой? ну может на сеньора в эту команду пройдет, позвоню". или все сложнее?
Херки есть разные, кому-то тупо надо закрыть вакуху, а там трава не расти. А у каких то есть высшее психологическое, миссия построить команду мечты и прочее. По моим ощущениям в Скандинавии с этим особенно плохо, меня как то норвежские хер и херка, час расспрашивали за жизнь, про семью и т.д. Вот эти ребята за незаконную или не этичную строчку в резюме, просто отклонили бы на этапе резюме.
>меня как раз на финале/калчефите спрашивали есть ли какие-то продукты где я не готов работать типа ставок. ну я ответил, что вообще похуй, если все честно/добровольно/со смазкой. контора вообще не про ставки. офер получил, принял на грудь
Меня онлайн казино тоже спрашивало, очевидно что не всем их бизнес нравится.
другое имел ввиду, типа руками надо многое писать, и не хватает удобных штук из других высокоуровневых языков.
>Правда, что в гуланге самые пиздатые горутины?
Да. Не красят функции, вытесняющая многозадачность, можно сравнить миллионы. Единственное, чего нет это сборки мусора с учётом потока.
slices.Insert(s, len(s)/2, val)
Не получится написать большинство паттернов
Если у тебя куча бизнес-логики, то единственный нормальный вариант это java + spring.
Из того, где я работал, go был неплох, где нужно было решать задачи транспорта. Ну вот взять кусок байтов из топика, немного его покрутить и отправить в другой топик.
Или например взять поток байтов и раскидать по s3 бакетам. Ну или например сходить в 10-20 сервисов в многопотоке, забрать у них метрики и как-нибудь аккумулировать их у себя, сорт оф дашборд чтобы получился.
Вот это нормальное применение Го. Здесь нет походов в базу данных и нет логики с корнер-кейсами, которая может взять и поменяться внезапно.
Если писать классические круды наподобие тех, что нужны в банках/финансах/энтерпрайзе, то будет хуево.
Писал также круды энтерпрайзные на питухоне. Там на проекте тоже не было нормального DI. Куча самописного говна на метаклассах, декораторах, DI на декораторах, магия, спрятанная в импортлупах, из ниоткуда появляющиеся циклические импорты и прочая залупа. Питон имхо годится только для каких-то прототипов на начальных стадиях. Чтобы показать начальству, что твоя идея вообще может работать хоть как-то. Потом это нужно переписывать на другой язык с нуля, а питуха выбрасывать.
Если у тебя команда нормальная, то ок.
Я на первой работе тоже на го писал, правда мне дали легаси кал ковырять, который вообще писали не в моей команде и который был крайне ужасно написан. Там нужно было какие-то доделки сделать по заказу, но никому нахуй не всралось ковыряться в застарелом говне мамонта, поэтому этот сервис скинули на меня.
А потом я ушел в другое место на еще более плохой проект, лол. Вот такой неудачник по жизни.
>похожий язык под названием V
v-lang это известный скам в области компиляторостроения. Не позорься и уноси эту парашу.
>А по поводу Питона, читал на многих ресурсах что он хорош только для аналитиков и МЛщиков. Для бэка это хуйня (не моё мнение)
В целом соглашусь. Большой бекенд проект на питоне с бизнес логикой превращается в самое запомоенное легаси.
Питон хорош для быстрых прототипов. Для чего-то большего - нахуй и в пизду.
Там до сих пор под капотом http вызовов curl вызывается?
>8. Нативный компилинг? Та же джава и шарп уже ссут не на пятки а в харю.
РРРРЯЯЯЯЯЯЯЯ, нитрендова, пацаны в шкалке в унитаз головой макнут, нужно чтобы байт-код в виртуальной машине исполнялся! Барин так сказал, значит так и нужно!
Не знаю как в шарпе, но в джаву грааль завезли разве?
Кажется, этот проект просто умер где-то в недрах оракла.
Зато байткод можно генерировать на лету, а потом его JIT в нативный переведёт. И там где у го рефлексия, у джавы и шарпа наивный код.
>байткод можно генерировать на лету
А нахуя? Ну да, есть bytebuddy, но для меня это все кажется какой-то очень хуевой магией, которую потом раздебажить в случае чего будет почти невозможно.
По процессору у рефлексии оверхед больше. По памяти у джита.
Это не для крудошлепов технология. А для тех кто пишет системные библиотеки, DI, ORM и т.д. Мне приходилось этим заниматься, по началу конечно надо повникать, но в целом ничего невозможного. Обычно генерированный код это просто клей между библиотекой и пользовательскими классами.
Настолько пиздатые, что авторы языка пишут блогпосты про то, что ГОРУТИНС АР НОТ ИНАФ, и собираются в следующем релизе впиливать в дополнение к ГОрутинам таки и обычные КОрутины. А в любом стайлгайде по конкурентности первый пункт - не использовать горутины (в публичном апи).
За нормальной асинхронщиной пожалуйте в эрланг\эликсир.
Идеологически и теоретически джит - более правильный подход, так как может в профайл-гайдед оптимизации наживую. За джитом будующее в любом случае.
>Настолько пиздатые, что авторы языка пишут блогпосты про то, что ГОРУТИНС АР НОТ ИНАФ, и собираются в следующем релизе впиливать в дополнение к ГОрутинам таки и обычные КОрутины.
И ты даже можешь дать ссылки на эти блогпосты?
>А в любом стайлгайде по конкурентности первый пункт - не использовать горутины (в публичном апи).
Ты не понимаешь разницу между "не использовать" и "не использовать в API"?
>За нормальной асинхронщиной пожалуйте в эрланг\эликсир.
Любишь несвежее говно?
>Любишь несвежее говно?
Гугл умудряется выдавливать свой голенг уже несвежим, каким-то чудесным образом, у них там 86 год так и не закончился судя по всему.
Маня, где ссылки?
>дать ссылки
Чушпан, если не следишь за офсайтом сабжа, то хотя бы гуглить научись
>Ты не понимаешь
Понимаю. Авторы рассчитывали, что каналы будут одной из основных абстракций языка, наравне со слайсами и мапами, но практика показала, что они обосрались ошибались.
>Любишь несвежее говно?
Нет, я в го-треде не от любви сижу
>>3052664 (OP)
> Первая горутина, которой достанется поток выполнения, проиграет, т.к. на этот момент канал battle ещё пуст, и она сможет в него записать
Чтобы так было, тебе надо добавить в канал буфер. У тебя канал небуферизованный.
Сейчас у тебя первая горутина которая получила исполнение лочится в ожидание одного из двух событий:
1. У канала появился читатель готовый читать.
2. У канала появился писатель готовый писать.
(при этом горутина не может сама залочить канал и на чтение и на запись)
Когда потом исполнения доходит до второй горутины, ожидание первой тут же разрешается либо в одну, либо в другую сторону.
К слову, даже если ты добавишь буфер в канал battle, у тебя порядок тоже будет без гарантий, т.к. первая горутина может вполне себе быть не зашедулена сразу же. Гарантии ты можешь получить только синхронизировав горутины руками явно.
я php-разработчик, с коммерческим опытом около 5 лет.
волею судьбы на нескольких проектах имел честь получить опыт с гошкой и мне понравилось
в последнее время начал погружаться все глубже (написал несколько пет-проектов - во сновном боты + игровой сервер для карточных игр на вебсокетах)
хочу в обозриом будущем свичнуться с концами в го.
отсюда просьба - порекоммендуйте здравое чтиво по конкуррентному программированию и идематическому пути всего этого зоопарка в го.
в целом со всеми примитивами в контексте гошки знаком хорошо, читал ОС таненбаума и архитектуру компьютера + 100 ошибок в GO (считаю очень полезной эту книгу) + Golang для профи
Хотелось бы глубже разобраться и получить железное понимание всех конкуррентных концептов - для меня как для похапешника это не так очевидно)
Возможно есть какие-то хорошие опенсорс проекты или специализированное чтиво статьи для продвинутого уровня?
базу уже имею (понимаю как не нарваться на дедлоки и когда и как лочить данные + всякие паттерны а-ля воркерпулов и слияния каналов мне известны) и пока не очень понятно, каким образом и откуда набраться сильных знаний в этой области)
буду благодарен за ваши советы и мнения!
Это копия, сохраненная 30 апреля в 21:15.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.