Это копия, сохраненная 10 ноября в 18:23.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
С чего начать:
- В обязательном порядке проходим 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
Прошлый тред:
>>3195987 (OP)
Ето в пендосии вы никогда не найдете работу на го. А в РФ го теперь такой же мейнстрим, как пхп или питон. Кмк го вообще только в России и Китае взлетел, а на западе его используют только фаанги и бывшие джавашопы с кучей денег.
не, ну годная вакансия, но это Ростов-на-Дону и таких вакансий ОЧЕНЬ мало в этом и весь поинт. Да, с одной я погорячился, но шансы найти работу это не увеличивает. Вы просто посмотрите на другие стэки. Ну и главный да, ещё совет джунам не прыгать по языкам, выбирайте - учите BACKEND - если он вам так интересен, перескочить всегда сможете. Но выбирать Go первым - очень-очень сомнительно, это далеко не мейнстрим, мейнстрим это нода с пхп.
Гейткипер извивается как уж на сковороде: сначала нет вакансий, потом есть но мало и вообще это Росов-на-Дону и вообще идите в ноду или пхп вкатывайтесь, нечего тут это самое. Насколько нужно быть неуверенным в себе как в специалисте, чтобы бояться конкуренции от вкатунцов...
>это язык для ОГРОМНЫХ сервисов
Представляю объем бойлерплейта в этих огромных сервисах на Go.
Go - это язык микросервисов. Причем довольно всратый, я поработал на проектах и с питоном, и с го, и на го довольно тяжело писать по сравнению с питухоном, где полно всяких фреймворков, которые позволяют обычную рестуху написать в х20 раз быстрее чем на гоуленге.
Мне кажется Go возможно скоро умирать начнет. Вижу популярные либы на гитхабе для Го с кучей звезд - очень часто встречаюсь на заброшенные проекты. Где последний коммит был года 3 назад. Или 5 лет назад. Там какие-то issue копятся, но поддержки как таковой уже нет.
А в js и питухоне все наоборот, куча популярного тулинга пилится огромными сообществами и не забрасывается.
Блять, кто нахуй на этот буллшит поведется, видимо тот, кто ни разу серверную лапшу на пистоне не видел, ну не мудрено, видевшие вырвали себе глаза и не видят уже ничего.
Асинхронный питон это лютое говнище. Вот это реально невозможно читать. Если вас приглашают на проект с асинхронным питоном в бекенде, то не идите туда.
Но обычный синхронный питон вполне неплох. Если есть цель быстро наговнякать, то самое то.
> Извините, а вы не знакомы с реактивным программированием? Наш проект очень быстро развивается и нам нужно эффективное и правильное и быстрое исполнение задач, поэтому нам нужны реактивные программисты. Хрюша тихо кидает резюме в урну и говорит В любом случае, спасибо, я вам обязательно напишу!
Бредятина. Вкусовщина. Ничем не отличается. Питон как питон. По структуре кода питонопроекты ничем от го не отличаются. Если сделать на го монолит такая же лапша будет.
Сап, как в go обстоят дела с gui? Необходимо сделать простой секундомер с возможностью вывода графика результатов.
Что есть на рынке легкого, чтобы не тянуло за собой ничего, работало просто как компоненты и было кроссплатформенным? Пока из такого выцепил fyne, но мб еще что есть
Потрогал немного файн этот, нихуя не понятно, но достаточно интересно. Вопрос открытый. Есть ли какой-то стандарт для GUI на go?
google -> awesome go -> gui (сам попробую на wails пописать микропоеботу для себя, но пока не нашел, как у него обстоят дела с глобал хоткеями)
>электрона
> PyQt
вы ебанулись заставлять юзеров грузит себе целую среду интерпретатора питона вместе с вашим кодом или вообще целый ёбаный хромо-браузер (!!!) (електрон)
Что мешает вызвать системный рисовальщик окон из go? или даже залупу-в-себе вроде QT кросплатформенную подключить
Вот как раз возник вопрос по теме. Как я понял для GUI есть два подхода: либо на основе web (использовать html/css/js и типо рендерить браузер для них), либо использовать нативные??? вещи типо qt или gtk
Правильно понимаю, что второй вариант оптимальней\производительней\легче? Еcть какой-то хороший материал на эту тему, а то я ничего толкового не смог нагуглить, а разобраться хочется?
> системный рисовальщик окон из go
Не подскажешь что это, пожалуйста?
Юзеры обычно неуважительно относятся к программам которые мало весят. Много весит - значит есть есть добро в программе. Не зря качал с торрента. Мало весит - хуйня ничего не умеющая.
Если ты что-то полезное гуешное на го напишешь, а не пустые окошки на винапи,то дистрибутив твоей программы тоже будет весить огого.
окей, сиди без работы дальше
так и в чем я не прав в итоге? не, ну если готовы на стажировке год за дошик сидеть - дерзайте, может, и выйдет у вас что. На стажировку нормальную попасть тоже челлендж. А можно не страдать хуйнёй, например
> Что ты имеешь ввиду под глобал хоткеями?
Мне нужно, чтобы приложение отрабатывало комбинацию клавиш, даже когда оно неактивно.
В некоторых фреймворках такого нет, есть только локальные хоткеи, которые работают при активном окне приложения
>Не подскажешь что это, пожалуйста?
Тебе эта хуйня не нужна, сейчас так никто не делает.
https://learn.microsoft.com/en-us/windows/win32/directshow/step-4--draw-the-bitmap-on-the-client-area
Вот такое и мне нужно на самом деле. Я нагуглил их пример хоткеев, но не понятно глобальные они или нет, и это в альфе третей версии.
А всякие библиотек для хокеев это не то?
> А всякие библиотек для хокеев это не то?
Действительно, как то я и забыл про это. Первая же ссылка в гугле дает пакет с "Global hotkey registration without focus on a window".
Завтра попробую wails поковырять
>Имеешь ввиду с помощью электрона?
Да, но ещё можно как вариант взять другие решение, которые не такие популярные, но лучше по перформансу, например tauri или neutralino.
>>263343
На современных компьютерах (даже очень бюджетных) нет проблемы с тем, чтобы заставить юзера грузить целый ебаный хромого-браузер, не должно быть сильных тормозов.
https://github.com/Elanis/web-to-desktop-framework-comparison
А то я тут текст "Hello world" в 0,0 рисую, а оно мне сдвигает его хер пойми куда.
Какой же ты ебанат. Рака яиц тебе и твоим юзерам
Такой bread только у тебя в голове, я как раз более расположен к маленьким портабл программкам, которые можно и в старые флешки засунуть.
В 2024 если ты что-то тянешь с торрентов ты уже архаичный продвинутый пользователь. Не неси чушь услышанную на ютубе.
В этом треде все анальники по определению.
Тоже решил потрогать wails
Мне интересно, какого хрена он дефектный проект на svelte компилит 40 секунд на M2?
А второй раз у тебя тоже долго билдтися?
Я поставил wails, первый раз проект билдился долго (юзал ванилу js), но последующие разы все происходило быстро.
С растовским таури тоже первоначальный билд много времени занимал.
Ха, во второй раз за 3 секунды сбилдилось
Как вообще оцениваете такую перспективу?
Только не надо объяснять о тоннах перфокарт с кобол кодом, который управляет 99% финансовыми транзакциями. Речь о новых проектах, никто же не хочет поддерживать легаси говно.
Хайп дривен девелопмент существует, но в больших компаниях он случается только если приходит новый CTO с соответствующим бекграундом.
Во фразе переписать все с X на Y, ключевое это переписать а не с X на Y.
Срачи между языками начинают неполноценные люди, компенсирующие свои проблемы за счет выбора той или иной догмы. Поэтому зачастую если видишь хейтера - то он как специалист весьма неполноценный.
Единственным исключением является, когда используют агрессивный маркетинг и тебе навязывают кривую неудобную херню вместо нормального любимого инструмента. Так например сейчас растом, который пытаются пропихнут везде и так было с го, когда его питонистам натягивали, отсюда остаточный негатив на го.
В Тиньке гошное направление сейчас загибается. Начали очень бодро, но отсутствие созревшего фреймворка привело к адовому хаосу в проекте. Сейчас жаркие дискуссии идут об отправке большей части кода нахуй. Планируют оставить только микросервис связанный с брокерами сообщений. Походу спринг выйдет победителем, ибо опять начали жавистов искать.
Колесо сансары совершило очередной оборот. Лет через 5 забудут еблю, попытаются ещё раз переписать.
Тинек это где выкинули основной фреймворк для джавы (spring) и написали свой велосипед kora? Думаю пример тинька не стоит приводить, там и на scala до сих пор пытаются писать.
>откуда начался срач с Javистами
В этом итт треде он начался. А откуда ему еще взяться? Основной тейк был про то, что в го нет нихуя и нужно писать велосипеды, а в джаве все есть.
>>267266
>как вы к нему относитесь
Сначала был ярым сторонником джавы, активно хуесосил го в этом треде, потом семенил, притворялся разными постерами, отвечал на свои же сообщения, но в противоположном контексте, всячески понижал уровень культуры дискуссии в этом итт треде.
Сейчас я вкатился в айти на помойное python легаси и мне уже просто хочется побыстрее с питона срыгнуть в голанк.
Переписывать древние копролиты с джавы на го дело не совсем тривиальное, в том смысле что доставать проект из копролита нужно еще уметь, иначе получится хуета полная.
Проще забить хуй и дождаться пока новый СТО не придет и не найдет бюджет на то, чтобы нанять компететнтых людей, которые смогут по нормальному вынуть проект из копролита.
Новые проекты сейчас наверное все же больше на гоуленге начинаются.
Вырос из сисадмина в девопсы, но пишу только на баше по факту. Хочу изучить Go. Что такого охуенного можно написать на нем, в чем сильные стороны языка? Дайте мотивации
Операторы для кубера писать не предлагать
- я правильно понимаю, что итоговый скомпилированный файл из go может работать как на linux, так и на windows, если там внутри нет никакой платформо зависимой херни?
- вызов баш команд будет считаться зависимостью от винды, или оно как-то хитро оборачивает?
>я правильно понимаю, что итоговый скомпилированный файл из go может работать как на linux, так и на windows, если там внутри нет никакой платформо зависимой херни
Если через go build собрать? Не должен. Как минимум формат исполняемых файлов в линухе и винде разный.
>но отсутствие созревшего фреймворка привело к адовому хаосу в проекте
Fiber религия им не позволяет использовать?
>Fiber
Много на нём писал? Я 1,5 года с ним работал на прошлой галере и это натуральный шлак с кучей малосовместимого говна. При этом коды испралений в они принимают очень неохотно. Пользовали свой форк фреймворка с микрофиксами и 7 правленых либ контриба, которые уже никто не поддерживал. Тащемто в спринге такой хуйни нет.
Не слушайте этого хейтера. Сейчас все банки выкидывают на мороз джаваскуфиду и переписывают копролиты со спрэнг фримверка и хубирнейта на гоулэнг
Не будет тебе никакой мотивации. Тебе либо что-то надо/интересно и ты сам пишешь, либо это тебе не нужно и хуй ты себя заставишь.
Не слушай этого пориджа. Там все с жабы на го переписывают уже хуеву тучу раз, но каждый раз почему-то не дописывают
Олимпиадники на ГОвне не пишут, в основном перекатившееся php-отребье с понятным итогом
Пхп-отребье собес в тинек не пройдет. А вот олимпиадники пройдут без проблем. Правда непонятно, у кого код, в результате, будет хуже.
Вот ты и спалился, пхп-дебил, в тиньке изики и самые простые медиум МАКСИМУМ
>Пхп-отребье собес в тинек не пройдет
Ну я пхп-отребье, и в тинек проходил собес, оффер был. Что с ебалом?
>в тиньке изики и самые простые медиум МАКСИМУМ
В тиньке полная копия процесса найма, которую взяли у яшки. Там точно такая же ебка литкодом на 3-4 секциях, секция на сисдиз и финалочка с менеджером где тебе популярно объяснят, почему 200к это норм зэпка для сеньора. Собесить тебя будут яйцеголовые порриджи из МФТИ, если что
Какие альтернативы fiber? В го вообще актуально такое? Gin, echo, chi, что-то ещё?
600к в Москве у сеньора? В каких компаниях? Такая зарплата даже у тимлидов редкость. У меня есть знакомые с такой зарплатой, но это всё валютные удалёнщики.
>600к в Москве у сеньора? В каких компаниях?
Ни в каких. 600к с улицы ты можешь получить, если устроишься лидом или руклем отдела по знакомству. 600к сеньке будут платить, если тот отмахал 10 лет в конторе и тянет проект с самого старта. С другой стороны 600к это 6к бакинских - зарплата стажера в какой-нибудь зарубежной конторе
Так в том и проблема, что никто до сих пор не написал нормального фреймворка. Файбер, джин, эхо это всё сахарок вокруг хттп роутера от одного гигапрогера. Они под копирку делают контриб репу, куда накидивают васянских адаптеров, мидлвари, плагинов разной степени паршивости. Часть из них теряет сопровождающих и загнивает до полной несовместимости с главной репой "фреймворка" (прости Господи). В итоге имеем "а вот на джине написали 10 авенсом сайтиков", галеры с зепкой до 80к от говнарей воннаби кабанов, бигтех, который пилит свой Т-велосипед.
И в итоге как пишут в серьезных качественных компаниях? Просто на стандартной библиотеке?
> И в итоге как пишут в серьезных качественных компаниях? Просто на стандартной библиотеке?
на GRPC, а так скорее всего свои обертки есть или чета такое
В гугле все сервисы общаются по gRPC, а наружу смотрят фронтенд сервисы написанеые на С++.
Хочу быть С++ фронтендером...
По моему опыту из одной галеры и двух шараг с собственным продуктом, все ляпают как попало, а потом берут что-то из проверенного временем. Гошку оставляют только на узких местах. Хэтапе ручки удобнее и безопаснее дёргать полноценными фреймворками. Ссаный круд со всеми обвесами дюже сложно сколотить на голанге, вот и остаётся он уделом маргиналов. Однако, байтойобствовать в вебе, при острой нужде в параллельщине, на го одно удовольствие (сравниваю с крестами), но тёплое местечко искать было сложно.
В голос
Конечно я могу щас нахуярить его сам, но вряд ли от иньекций супер провалидирую все
Условия:
-вакансии не важны.
-использование 90% в вебе и мелкая автоматизация (язык общего назначения).
-нужно максимальное экономия по железке - cpu и памяти, то есть максимум выжать RPS на бюджетных vps.
-все еще важна скорость разработки, насколько велика разница между го и раст (как между го и с++??).
-наличие готовых стабильных библиотек.
Rust, C++
В go есть сборщик мусора, это значит памяти больше будет кушоть.
> использование 90% в вебе и мелкая автоматизация (язык общего назначения).
100% Go
> нужно максимальное экономия по железке - cpu и памяти, то есть максимум выжать RPS на бюджетных vps.
Скорее всего тебе это не нужно. Разница в потреблении памяти у Rust и Ruby всего лишь в пару раз, а задрачивать перформанс в своём вебе на 1rps тебе нахуй не нужно и никогда не окупится
Поэтому Go
> все еще важна скорость разработки, насколько велика разница между го и раст (как между го и с++??).
Точно Go
> наличие готовых стабильных библиотек.
Тут похуй
Кэфка, кликхаус, эластиксерч и прочий обвес
>Какие не-Go-шные знания нужны Go-разработчику?
Блять, нет такого понятия как КАКИЕ НУЖНЫ ЗНАНИЯ. Все фирмы разные. Все проекты разные. Одним нужно одно, другим нужно другое. Спроси МТС, web3-стартап, госкомпанию и ещё 10 компанию и ты получишь 10 разных ответов. Тебе МТС скажет, нам нужен Go, gRPC, Kafka, PostgreSQL, Redis. А web3 стартап стажет, нам нужно знание polkadot, блокчейна и всё такое.
Это надо смотреть ИН-ДИ-ВИ-ДУ-АЛЬ-НО!!
Нет никаких "универсальных знаний"
Нет никакой "базы golang"
Есть конкретный проект и конкретные знания
Как по мне - Го это лучший Питон
Кубер, Докер и ещё много чего
не, да он и в вебе не особо прижился
Он и вебе прижился только в России, на западе хуй найдёшь работу на го
Го -- это для простых и очень эффективных сервисов, которые делают что-то одно и простое. Прямо как Юникс. Если пытаться только на нем построить какую-то большую развесистую систему, то насосешься хуев, потому что нет ни инструментов для этого, ни бест практик.
Вроде Си, когда на нем пытаются писать что-то большое, для чего он не предназначен, типа Gtk -- приходится все изобретать с нуля, криво и неудобно. А вот для маленьких простых утилит пушка-гонка.
>Вроде Си, когда на нем пытаются писать что-то большое, для чего он не предназначен, типа Gtk -
Xorg на СИ сделан. Doom на СИ сделан. Всё можно написать на чистом С.
Просто в С нет поддержки ООП. А ООП это ведь модно стильно удобно молодежно. Можно все писать "по человечески" не прибегая к структурам указателей на функции. Так что все и выбирают С++, чтобы не пердолится лишний раз. А так можно и на Го сделать нормальный проект.
А gtk просто гои делали, вот у них ничего хорошего и не получилось. С ведь не гибкий, в этом основном минус, что если настроил этих нелепых конструкций - то чтобы что-то прикрутить, придётся добрую часть переписывать. А ООП, оно типо гибкое, предполагается что в любой момент можно изменить любой класс, и суть программы от этого не поменяется.
>RuntimeError is a no-op function but serves to distinguish types that are run time errors from ordinary errors: a type is a run time error if it has a RuntimeError
Как перестать орать с этого унтершпрахе?
От флагов, компрессии и сишных либ зависит. У нас максимально говённо, но поставлено на поток. Пока компилишь одну фичу, пилишь другую и наоборот.
Тоже не вериться, собирал гигатреш на с++ на древнем железе было столько же. Есть адекваты? Сколько ваши проекты собираются?
>На больших проектах го так же быстро компилится или сказка заканчивается?
Большие микросервисы назваются монолит, и это в джава/шарп тред.
А то! Когда в твоем коде становится больше 1к строк, надо разделить код пополам, каждую часть вынести на отдельный сервер и дергать функции через tcp стек. Это модно, стильно, как в авито.
Если у тебя 100500 одинаковых крудов, то разбивать на микросервисы можно для горизонтального масштабирования и управляего распределения нагрузки на части. Но обычно все сводится к правильной работе с СУБД, если работа крудов состоит, чтобы ожидать ответ от СУБД и формировать жсон для фронтенда. Но вот у тебя появляются очереди и воркеры. Не так все однозначно становится. Например доске объявлений в сервисе с большим количеством пользователей потребуется очереди обрабатывающие загружаемые пользовательские изображения. Ты выносишь их на "отдельные сервера" чтобы более филигранно распределить нагрузки. Хттп ручки становятся наиболее простой частью приложения. Усложнение состоит не в количестве строк кода, а в том что становится удобнее изначально все проектировать через обработку событий, а хттп ручки оставить в тонком шлюзе.
С немного другой стороны. Ты делаешь доску объявлений несколько лет. Потом ты делаешь CRM. Какой смысл делать CRM на той же самой кодовой базе, которая к тому же устарела и требует рефакторинга для устранения технического долга? Чтобы потом рефакторить еще большее количество кода? Бизнес не может ждать. Ему нужны новые фичи уже здесь и сейчас. Более того, коммерческая разработка состоит большей частью из склеивания готовых решений от других бизнесов. В том числе селфхостед решений. Например зачем тебе писать свой SSO если ты можешь keycloack использовать в виде отдельно сервиса.
Не надо все сводить к моде на микросервисы. Даже в проектах, которые пилятся несколькими челами, им порой бывает легче что-то реализовать по-быстрому в одельном микросервисе, чем вспоминать что они 5 лет назад там писали.
Если что я к авито никакого отношения не имею..
>Когда в твоем коде становится больше 1к строк, надо разделить код пополам, каждую часть вынести на отдельный сервер и дергать функции через tcp стек.
Потому что миллион строк кода, становится трудно поддерживаемым. А выносить можно и просто в библиотеку.
Ибифо: ко-ко-ко, а вот линупс ко-ко-ко
У линукса очень жёсткие процессы ревью кода, которыми занимаются профессионалы много лет работающие над ядром. И они не зассут сказать любому фаангу, что их патч в ядро говно и они его не примут. Потому там кодовая база в хорошей форме.
А в среднестатистической галере гребцы меняются раз в 1,5 года и попробуй скажи ПМ, что фичу надо пилить не неделю, а 2 месяца т.к. надо ещё зарефакторить кучу кода, чтобы всё было по уму. Поэтому миллион строк кода в одном сервисе, это практически неподдерживаемое говно.
Эх баля!
Пояснить можешь чего плохого в десктопном пека и винде?
Здесь чел делает примитивный и осознанно неправильный мьютекс
в пикрил методе же будет бесконечный цикл из которого нет выхода, потому что ни одна горутина не доберется до unlock. Если так, то почему прога у него работает и что то выводит?
Обычный спинлок. Кто-то первый проскочит цикл, остальные будут крутиться в цикле и ждать, пока первый не сделает m.state = false. Это неэффективно и без атомиков будут проблемы, но как демонстрация работает.
Сырой с резолвом параметров, обычно что-то вокруг pgx.
Еще есть кверя билдеры типа squirrel, но даже их довольно редко юзают.
Если нужен функционал темпорала - почему нет.
>- Ознакамливаемся с общим roadmap по изучению языка и сопутствующих инструментов: https://github.com/Alikhll/golang-developer-roadmap (постоянно обновляется сообществом)
Почитал, нашёл это:
Web Frameworks + Routers
Beego
Chi
Echo
Fiber
Gin
Revel
Что из этого по-настоящему актуально? Какие фреймворки/роутеры обязательно нужно изучить? Хочу перекатиться в го из другого бекенд стека
Последний коммит 3 года назад, кстати, поэтому и вопрос.
net/http
>Beego
>Revel
ларавело подобная срань - го для такого не годится
>Gin
>Fiber
профита от них мало
джин это тупо роутер над дефолтным хттп сервером
а фибер построен на fasthttp, который для лютого хайлоада
там ебалово с тем что буфера переиспользуются и тд
и если какой-то database/sql подрубить то профит от быстроты фаста аннулируется потому что оно будет узким местом
я в конторе где работаю (fortune 100) использовал фаст для случаев когда надо что-то быстро от клиента получить - отправить на обработку и отправить назад небольшой ответ типа 200 ОК
обработка в моем случае - отправка в буфер для сохранения в кликхаус
короче гайд для твоих говноприложух
- пишешь openapi 3 спеку для апишки
- берешь https://github.com/ogen-go/ogen и генеришь роутер с дефинишенами структур и функций
если оффнуть strict server то получишь доступ к http.ResponseWriter, http.Request, если включить то будут удобные хендлеры без ручной (де)сериализации джейсонов
NB: являюсь кунтрибутором в эту парашу
Это хорошо чтобы делать огромные коммиты, при мелких правках апи, для изображения бурной деятельности?
da там дохуя кодогена
роутер chi идеал для net/http
echo это как джн
net/http это самый стандарт
там еще и более функциональный роутер завезли в новых версиях
https://go.dev/blog/routing-enhancements
ехо как джин то есть - малопрофитно
Подскажите пожадуйста, как сделать так что бы при обращении например к http//example.com запрос попадал сначала на localhost:8000 и потом уже оттуда перенаправлялся на http//example.com. Именно так а не чтобы запрос шел на localhost:8000
Что значит переправлялся? Хттп редирект? Или сервер должен другой сервер опросить?
Конкретно задачу опиши, а не то как ты ее решить хочешь.
Пытаюсь выбрать себе язык общего назначения, мечусь между шарпами и го, хочу понять что есть го на сегодня.
>микродолбежка в круд
нет - это язык для инфраструктуры в первую очередь
круды сейчас на джаваскриптах пишутся
>вебассембли
про внутренности го (scheduler, etc) почитай для начала - это как jvm натянуть на вебассембли - такого нет и не будет
>МЛ
питон же
>Пытаюсь выбрать себе язык общего назначения
Rust or C++
Надо сделать так, чтобы все запросы на сайт hugo перехватывались прокси сервером
>про внутренности го (scheduler, etc) почитай для начала - это как jvm натянуть на вебассембли - такого нет и не будет
Некомпетентный
>Rust or C++
Говноед
Нет, но он подходит для многого другого:
- фронтенд
- бекенд
- мобилки
- десктоп
- IoT
- web3
- ml
>- десктоп
говно электрон
>- web3
скам для дебилов
>- ml
питон для обучения и тритон для прода
>- бекенд
круды да
>Дойч стал го использовать?
Давно уже и не только он. Потихоньку выкидывают джаваговно и джаваскуфидонов спрингописателей
Чушпанам не поясняют
>говно электрон
Во-первых, сам электрон в последние годы не настолько плох, как про него говорят. Во-вторых, есть tauri, neutralino и другие инструменты.
>скам для дебилов
Нет, скорее ты дебил, который называет скамом те вещи, которые не понимает.
>питон для обучения и тритон для прода
Да, питон для ml однозначно лучший выбор.
>круды да
Нет, не только круды. В принципе можно сделать всё то же самое, что можно сделать на го, кроме CPU bound задач, хотя и их при желании можно, но их обычно оффлоадят в отдельный микросервис на низкоуровневом языке через кафку/реббит/натс/etc.
>Потихоньку выкидывают джаваговно и джаваскуфидонов спрингописателей
Шизик выдохни. У ДБ ОДНА вакансия для Говноланг разработчика. Даже Кобол востребованей, там около десятка вакансий.
База чего блять? Го - это обычный язык общего назначения. Это не специализированный язык типа ampl для комбинаторики и оптимизации. Это не матлаб, это не симулинк и даже не systemc. На нём не проектируют электронику. Какую блять можно знать базу, если он универсальный язык по определению? Ты суперкомпьютеры чтоли собрался программировать или чё блять? Пиздец тупые вопросы.
Я бы даже рекомендовал для новичков.
1) Он прост, после других языков не хватает множества синтаксического сахара, от чего неудобно, а тебе будет норм.
2) Нет ООП деградирования, ты пишешь как думаешь, не создавая слоенного ООП пирога, размазывая бизнес логику.
3) Легко читается и сопровождается, можешь легко чужие сорцы читать. Что порой нужнее чем писать код самому.
Я как-то два года спустя открыл свой котлин код и вообще нехера не понял эту магию.
В общем, бери не парся. В каком-нибудь шарпе ты полгода только базу учить будешь, а тут ты и либы подергаешь и напишешь что-то.
Нет. На го вакансии в основном в бигтех, там ты с голым знанием го нахуй не усрался
Поэтому каждый гошник - перекатыш из пхп/джавы/питона/етс
Просто изучить - лучший вариант. Гошка простая, легкая, без килотонн сахара.
Если вкат - то с натяжкой, ибо требуют опыт
Бери шарпы, де-факто ООПшную тему знать и понимать надо
я не могу ответить для чего база - так говорят различные блогеры и тд.. Один сослался на то, что обучение на Go всегда подразумивает то, что ты уже знаешь эту самую "базу" и основы для прохождения курсов, обучения и тд
>>280706
Большое спасибо за совет!
>>280919
Работаю рекрутером в it) Везде требуют опыт. Когда джунов ищу с опытом от года - больше половины с накруткой и сразу понятно что нигде не работали. Все понимают прекрасно всё, но если чел талковый, то проблем нет, как правило. У меня больше вопрос про сложность и возможность обучения Go с нулся
>>281002
)))
>я не могу ответить для чего база - так говорят различные блогеры и тд.
Это из разряда "посоветуйте то, сам я не знаю что, чтобы я тоже знал".
>Один сослался на ...
Одна бабка сказала. В интернете столько людей, я охуею комментировать что каждый спизданул где-то в интернете. Давай так... тот кто сказал имеет какие-то регалии? Он важная шишка в гугле, майкрософте, амазоне? Он обладает глубокой экспертизой? Нет? Ну и всё, шли его нахуй. Любой школьник может зайти в интернет и спиздануть любую хуйню. Не значит что это хороший совет.
>знаешь эту самую "базу" и основы для прохождения курсов
Вообще, "основы" - это такая эфемерная хуйня, примерно как точка джи у бабы. Если ты спросишь 10 разных программистов, то получишь 10 разных, конфликтующих ответов. Она строится только на вкусовщине и ничем ином. Спросишь Петяна, он тебе с пеной у рта будет доказывать, что нужна математика в первую очередь, а спросишь Васяна, он тебе начнёт доказывать что нужно знать базы данных. Тут и так почти каждый день идёт срач какой фреймворк/библиотека лучше. Просто надо учить тему, а не ебать голову "основами", "базами" и так далее. Читаешь книги, желательно несколько штук, вот это и будет твоей базой.
> но если чел талковый, то проблем нет, как правило
А в чем толковость проявляется? Просто понимает, о чем говорит? А то я уже месяца полтора откликаюсь и все мимо. Щас вообще без опыта в разы меньше стало вакансий. Прям руки чешутся годик накрутить, да вот хз что писать даже(
Да и по-русски можно https://www.youtube.com/playlist?list=PLfnFOImnyWRW825IU_xG-IeFP1Nvm109a
А норм курс вообще? А то отус слышал не лучшими челами считаются. Да и фраза "демо-занятие" смущает. Но за наводку спасибо, потыкаю немного видосы
Надолго не надолго а доить надо пока у кабана божья роса с зёнок не стекла окончательно
С учетом как массово бигтех на него перекатывается и санкции летят на тулинг и IDE, Го у нас теперь навсегда.
+ заметил как инфоцыгане переключились на рекламу го. Реклама как с питоном, пиар под видом простого языка чтобы вкатун мог написать бота за три дня.
Ну вот теперь как в питухоне, 1200 стажеров толкаются локтями за недавнюю стажку в авито.
На говнаря реал закатиться мнение из жопы если что если свитчиться миддлом, причём подрочив хорошенько многопоточку. Вкатышам соболезную
то есть чел-рекрутер, который ищет разных разрабов и находится по сути в этом же ИТ - поехавший?)
чел со стройки норм, а чел, который намного ближе не устраивает?))
ты еблан, ой
Для каких кейсов? Чем он лучше обычного микросервиса на php, например сходить в бд, достать данные вернуть, или запустить через консольку ffmpeg, обработать что-то и тд.
Что на GO делают вообще?
И далее вопрос, что нужно знать в GO и как долго вкатываться?
1. Написать скрипт и не ебаться с окружением для деплоя.
2. Ультра быстрый шлюз в кластере.
3. Байтоёбство с параллельным выполнением.
На большинстве проектов голенг вставляют только для разгибания узких мест. Писать на нём сложную бизнес логику можно только в случае, если ты готовишься съебаться к другому кабану.
>Чем он лучше обычного микросервиса на php
Ты докером хоть раз в жизни пользовался? А кубернетисом? А прометеусом пользовался? Ты можешь нечто подобное написать на пхп? Чтобы был докер на пхп? Нет? Ну и всё нахуй, сиди и не пизди.
>Писать на нём сложную бизнес логику можно только в случае, если ты готовишься съебаться к другому кабану.
Как раз Го в этом вопросе даже лучше. Код очень прямолинейный и нет никакой магии.
В отличии от джавы, где вешаешь аннотацию - и у тебя магически начинает выполнятся куча стороннего кода.
>В отличии от джавы, где вешаешь аннотацию - и у тебя магически начинает выполнятся куча стороннего кода.
Да на пхп давно уже такая же хуйня. Современный коммерческий пхп это недоспрингбут
Школьник, съеби нахуй, заданы конкретные вопросы, а читать мне твои вскукареки мне неинтересно, мне нахуй не нужно писать кубернетис и докер, меня больше волнует мотоцикл и фургон для него
Ты серьёзно даунские вопросы задаёшь - чем компилируемый язык лучше не-компилируемого? По-моему, всё очевидно. Чем машина лучше велосипеда? Ну наверно скоростью, не?
Согласин
Пхп - минитрактор с максимальной скоростью 60 км/час
Голенг - трехколесный велосипед с реактивным двигателем
Везде где надо скушать жсончик и недолго думая пукнуть в кафку можно воткнуть гошку
Везде где надо быстро обработать дохуя данных с не самой пизданутой наглухо бизнес-логикой (как в основном копролите), можно воткнуть гошку
Благослови их Г-дь
Школьник, ну-ка скрин где я это задаю, или твоя спидозная мама подохнет, если скрин не принсешь с:
> вопросы задаёшь - чем компилируемый язык лучше не-компилируемого?
Твой школьный мозг не способен даже текст прочитать, малолетнее животное
"...для чего GO? Чем он лучше обычного микросервиса на php"
Golang какой язык? Компилируемый или нет? А php? Сам дальше сообразишь?
Ииии? Если какая разница если время ответа 0.002 обычно? Школьник, я тебе уже писал чтобы ты съебал нахуй
Простой синтакисис, разберешься даже в говнокоде. Скорость разработки. Хорошие тулзы из под каробки(тесты, бенчи, форматирование), много либ на любой вкус. Хорошая паралельность из пад коробки. Есть уже готовые мини http фреймы(аля роутеры). Компилируемый язык, не надо ничего лишнего поднимать(nginx, php-fpm). Мало ресурсов поедает относитльно пыхи, особенно заметно когда у тебя куча динамо стендов в кубе, под каждую фича ветку или баг фикса.
Спс
>время ответа 0.002 обычно
Ну ок. Запилишь тогда аналог твича? Чтобы видео перекодировалось и раздавалось 5000 зрителям одновременно? Сможешь? Я писал... Лул да кто ты такой, ты чорт епт.
Я другой анон, но вангую вызовы си библиотек или даже cli команд сишных программ
Школьник, неси скриншот >>283588
>Запилишь тогда аналог твича? Чтобы видео перекодировалось и раздавалось 5000 зрителям одновременно?
Школьник, ты наверное на го и приложения для айос и под андроид делаешь, да? Обезумевшая малолетка решила поиграть какой язык лучше - мне похуй, меня волнует авто и мото, малолетний, который еще не скоро вырастет. Ты даже не осознаешь что всем похуй на твой линукс, виндовс, пхп, го, яву. Малолетняя личинка человека
>Я писал..
А кто тебя спрашивал что ты писал? Создай свой тред и рассказывай что ты писал. Нахуя ты мне это пишешь?
>Лул да кто ты такой, ты чорт епт.
Ждем скриншот от пидора, который не предоставит
А я слышал наоборот: чем новей язык, тем меньше на него конкуренции вкатунов.
>Для бекенда лучше будет typescript.
Будет лучше пхп, ява, с#, а не этот костыль, если цель ООП и бизнес поддерживаемая бизнес логика
>Запилишь тогда аналог твича? Чтобы видео перекодировалось
Так в твитче это не на го делается, а на си (ffmpeg)
>количество вакансий на %ЯЗЫКНЕЙМ% больше с каждым годом
Этот тейк в каждом первом треде встречается. Весь бигтех уже все переписал на Шарп, Го, Раст, Котлин, Эликсир, раз 20 наверное.
Гений не слышавший про ffmpeg, нахуя ты в этом треде сидишь??
>с мощной системой типов
Которые нахуй не нужны
даже го весь наполнен := вместо объявления типов
Язык для бекенда не самый популярный, но это факт, что с каждым годом вакансий на том же NestJS больше процентов на 10-20, я регулярно мониторю рынок т.к. это мой основной стек. Бигтех не показатель, тем более там тоже иногда это используют.
>>284193
Динамикодриснявая мартышка, сдрисни пожалуйста из треда статически типизированного языка.
Го называет динамикодрисней, а от тайпскрипта кайфует....
Так и запишем
С каждым годом он популярнее становится потому что удобно мартышку на жсе садить и фронт и бэк делать + желающих пруд пруди, которые демпенгуют зепки и готовы за еду работать
Я не называл го динамикодриснёй, а наоборот назвал этот тред тредом статически типизированного языка, в котором нет места динамикодриснявым макакам, которые говорят, что типы не нужны.
Обьясните в чем преимущество делать map[string, *MyStruct] вместо map[string, MyStruct]. Пишут что разницы не сильно много, первый вариант чутка быстрее
> мимо вкатун
В первом случае у тебя будет лежать указатель на MyStruct, во втором сама MyStruct. В случае указателя у тебя копируется туда-сюда 8 байт, в случае структуры - будет гоняться структура целиком.
джавист, уходи
вспоминаю каждый раз когда ищу себе нормальный язык, но не каждый день
Часто возникает проблема, что появляется куча структур типа UserRequest, User, UserDB и так далее, которые описывают одну сущность, но имеют разный набор полей из-за специфики используемого слоя (условно в реквесте мало вероятно, что будет содержаться полная информация о юзере, поэтому есть UserRequest).
Как быть в таком случае? Создавать кучу вариаций или гонять везде одну структуру и извлекать только нужную инфу?
Так на жс тс на бэке куда не перни нет нужной библиотеки и так же пили свой велосипед, плюс куча легендарных библиотек isNumber
Плюс одновременно чекай и жс код и тс
На го все из коробки
После тс с таким кайфом на шарп ушел, ты не представляешь
А потом с шарпа на го
>Кто-то вообще помнит про эликсир?
Пока тред этих полезных, не утонул, они хвастались зепками и низкой конкуренцией.
Так в GO идут одни свичеры.
Чего бы и не спросить.
Я не думаю что есть люди которые начали путь программирования с go и так и остальись с единственным языком.
Нет, должны быть разные структуры, в идеале кол-во слоев = кол-во структур
В моих крудовых поделках 3 слоя, слой сервера, слой сервиса и слой базы данных, соотвественно 3 структуры
>Что такое lvalue и rvalue?
>>285623
"Одно справа, другое слева от знака равно", -
представляете что человека завернут не слышавшего об этом теоретическом говне даже ни разу за время написания десятков толстых проектов?
С тем же успехом можно спрашивать определение манипулятора "типа мышь" и заворачивать людей и думать какой хрюша охуенный работник
Уже много лет есть всё необходимое, не нужно никаких велосипедов пилить. Зачем чекать жс код, если исходники на тс?
Т.е. мы постоянно должны перекладывать из одной структуры в другую при переходе на новый слой? А если они одинаковые по составу полей?
И что делать, если в разных сценариях требуются отличающиеся структуры? Условно для update-хендлера нужен только id, а для create - доп инфа. Опть плодить структуры?
Что выбрать зависит от ситуации. Несколько разных объектов дают гибкость: можно менять внутреннее представление, базу и апи независимо друг от друга. Меньше шанс что данные случайно утекут клиенту, или наоборот как-то мусор протечёт в базу. С другой стороны нужно конвертировать туда-сюда.
Один объект на всё, хорошо подходит для простых случаев и позволяет писать меньше кода. Но скорее всего, по мере роста проекта придётся разделять сущности.
Так сущность и так одна. Условно юзер с полями id, name, age. Также он и в базе лежит. Но например для удаления мне нужен только id. ВОт мне этот айди совать в структуру User с остальными нулевыми полями и работать только с id, или создавать UserDelete только с полем id?
Не совсем вопрос по голангу, но может найдется что подсказать.
В общем, у нас есть небольшая команда челиков, которые пишут всякие инструменты для инфраструктуры. Они сейчас пишут на питоне и у них нет особой дисциплины в плане типов данных, форматирования кода и т.п.
Можете поделиться своим опытом перехода с питона на го? Типа, что можно ожидать. Тут питон не особо объектно-ориентированный, паттернов и т.п. нет.
Но я хочу перейти потому что в го статическая типизация и форматирование из коробки, ну и производительность конечно плюс, хотя в наших требованиях такого нет.
Инструменты планирую переводить как командной строки, так и веб апишки.
Заранее благодарю за ответы.
>Так сущность и так одна. Условно юзер с полями id, name, age. Также он и в базе лежит.
Ещё раз: это вначале у тебя у сущности 3,5 поля, а потом, по мере роста проекта у тебя добавится список телефонов который хранится в отдельной таблице, список ролей и т.п. И тут уже надо разделить АПИ, внутренние представление и базу. Хочешь делай сразу, хочешь рефактори потом.
>Но например для удаления мне нужен только id. ВОт мне этот айди совать в структуру User с остальными нулевыми полями и работать только с id, или создавать UserDelete только с полем id?
Ты придумал проблему на ровном месте. Просто передаёшь ID и всё, никакая сущность тебе не нужна.
Если первичный ключ составной или у тебя записи версионируются, создай объект PrimaryKey и юзай его и в сущностях и методе удаления.
>>285691
Жесть, на этот спам ДТОшками и перекладыванием из пустого в порожнее еще в джаваспринге жаловались, и опять к нему пришли
>>286204
Смотря какой объем кода. Большой объем и нет жестких требований по перформансу - лучше оставить на питоне. Не всем нравится спамить if err != nil, тем более там, где в этом нет необходимости. Это типичная проблема переписывания проектов - каждый новый человек стремится переписать под то что ему нравится и при отсутствии больших ресурсов это зависает в полузавершенном состоянии. Взвесь сначала.
Спорная затея. Голанг - это про веб микропенисы в очень узких местах. Твои очевидные проёбы. При переписывании будут баги. На питон кратно легче найти замену веслателя. Никаких профитов от статической типизации и производительности. Можно внедрить автоформат питоновских файлов при сохранении.
>Жесть, на этот спам ДТОшками и перекладыванием из пустого в порожнее
ДТО на реквест, ДТО на респонс, фабрика для ДТО, маппер для ДТО... кто работал на проекте, где любят дто, тот в цирке не смеётся
https://kata.academy/go/postpayment
Стоит оно того или забить?
А ты договор читал? Накрутят опыта, устроят мидлом
Есть много фри курсов по го, на том же степике и трекерах + книги
Рутрекер, нонамеклуб. Ну можешь еще на всяких сливофорумах покопаться.
Можешь, пж, пояснить за ДТО? Это то что я описывал, что для каждого слоя своя структура? Как от такого избавляться, а то не в восторге сам от такого?
>Жесть, на этот спам ДТОшками и перекладыванием из пустого в порожнее еще в джаваспринге жаловались, и опять к нему пришли
Иначе это превращается в 300 тыщ параметров в каждой функции ну или при изменении той самое единственной структуры, которую ты везде гоняешь, велик шанс что что нибудь где нибудь да наебнется
Кстати где то видел проект где навалили сотню структур и мапили их через одну единственную функцию через reflect (как по мне жутко нестабильная хуйня)
Ну вот неплохой текстовый курс для вкатунов https://stepik.org/course/54403/info
Вот уже для более опытных https://stepik.org/course/187490/info
Да, DTO - это термин из объектно-ориентированных языков, аналог структур.
>Как от такого избавляться
Не использовать там, где в этом нет смысла
>ну или при изменении той самое единственной структуры, которую ты везде гоняешь, велик шанс что что нибудь где нибудь да наебнется
Выглядит как какой-то религиозный подход, потому что умные люди так сказали. Ничего не наебнется, особенно если структура используется в одном потоке, это просто не так архитектурно красиво будет выглядеть. Иммутабельность в основном используют как защиту от гонок модификации данных, если нет многопоточного доступа - нет и гонок.
Просто ДУМАЙТЕ сами, что решает тот или иной подход, а не просто делайте потому что кто-то что-то сказал
Договор кабальный и кажется с подводными
Плюс этого курса в том что помогут устроится (в теории)
В общем думаю
DTO - это data transfer object, обычная структура с полями без логики. Используется вместе с ORM, чтобы не писать руками user.Id = reader["UserId"].GetInt32() снова и снова. SQL запрос возвращает какой-то набор сырых данных, с сырыми данными работать неудобно, поэтому они мапятся на массив DTO структур и дальше ты работаешь со структурами.
Эта контора полностью сломала рынок для джавистов-мидлов в свое время, они еще до хайпа стаи назарова существовали. Смысл в том что тебя надрачивают на прохождение собеседования (теории) и дают второго пилота для прохождения собесов. Работу тебе будут искать в Москве так как там самые высокие вилки. Отдать конторе нужно вроде 20% от месячной зп пару лет.
Не рекомендую, из-за таких пидорасов собеседования превратились в решения головоломок и допросы + неофициально устроиться на работу (если не хочешь платить алики) стало трудно так как теперь каждый второй с 3 годами опыта в вымышленной компании.
Теперь про минусы: стандартная либа не на генериках - хочется брать корень от целочисленного типа, новые фичи в новых версиях добавляют ненужной сложности языку.
>Скорость разработки на го намного быстрее любого другого языка.
Даже быстрее чем на руби рельсах с тотальным скафолдингом всего?
Тот чел сумасшедший. На гоу сраный круд будешь 2 недели пилить. Там дохуя всего может конфиктовать и для этого приходится везде метрики прикручивать.
Skill issue.
https://www.youtube.com/watch?v=h2pCxj_Fkdc
>Скорость разработки на го намного быстрее любого другого языка
Ну зачем сразу так толсто? На пыхе быстрее, на жс/тс быстрее, на руби быстрее, на питоне быстрее.
Ты пытаешься себя убедить или что?
Го это ходячий бойлерплейт, все что дальше микро-круда писать можно, но чрезвычайно уныло и муторно, а гребанное процедурное программирование возвращает нас во все те же проблемы 30-летней давности, которые были решены в промышленном ООП-программирование кровью и потом. У меня правда флешбэки от функций в 1000 строчек и 10 аргументами, с двухбуквенными переменными
Там додик умудрялся сравнивать зиг в дебаг сборке и специальные сокетные http-огрызки от го с полноценными http-серверами.
Но забавно как го начинает отжирать память, как теже жабо-шарпы, которые обычно резервируют хип
>Там додик умудрялся сравнивать зиг в дебаг сборке и специальные сокетные http-огрызки от го с полноценными http-серверами.
Он бы еще код на го сразу с машинным сравнивал.
суп двощ, есть ли способы спиратить IDE от JetBrains? СТудентскую лицензию давать перестали (хотя гитхаб дал, лол), а привыкнуть уже успел. Ну или где то купить слитую лицензию по дешёвке
А потом у тебя забирают вскод и жидбрейнс и оказывается что уже не ты программировал, а иде за тебя с жпт помощниками
Неожиданно го тоже без вскод - тыква, хотя вскод попенсорс.
Как мне отправить файл в ответ? Чтоб не просто набор байтов передался, а с названием файла по человечески
ну да, тру только на бумажке программируют, а потом подмастерья пересказывают код машинисткам
Срешь все в одну или несколько папок, иначе где-нибудь на двадцатом импорте словишь циклический импорт.
В связи с этим вопрос: го-сеньоры, меня бот не обманывает?
Какой бот? Тебе ничего не мешает отдавать хтмл с бэка и все. Тем более экспресс для фронта не используется, это бэк на ноде.
не обманывает, гошка во фронт не очень.
Есть варик генерить всё на беке - htmx + templ.
Есть что0то типа веба в wasm - wail go-app
Можно упороться и сгенреть всё в wasm там внутри генерить html и прочее.
Но один фиг тебе придётся писать много обвязки для работы с беком.
Также не хватает выразительности новых конструкций. Это по прежнему отдельные функции и структуры как в си. Нельзя их интегрировать в синтаксис с помощью перегрузки операторов.
Зато в обмен получаешь простой и читаемый код. Тиммейты на говнокодерах не смогут испортить настроение. Также производительность ниже всего лишь на процентов 5 по сравнению с оптимизированными плюсами. Говнокод и мозгоебля того стоит? Не стоит.
Откуда инфа про 5 процентов?
Хочу начать использовать пикрил библиотеку для своих петпроектов игровых.
Кто-нибудь пробовал?
На го только скрипты и маленькие микросервисы по работе и унику писал.
Работал в двух крупных проектах ЕС/США, дела обстоят так: есть набор внутренних и около-обязательных тулзов-оберток поверх стандартной либы или популярных мейнстрим-либ, например хттп сервер, в который уже всунуты дефолтные для конторы метрики и логгирование, или либа для БД, брокера сообщений и т.п. Делается это для единого контроля за структурой проекта и версиями, а то где-то уже обновили или взяли условный логгер v3, а где-то еще v1. Часто еще есть шаблонный проект со скриптом, который по одной команде создает тебе сервис из шаблона с нужным тебе названием или даже либами.
Бойлерплейт кода по сравнению с джавой действительно получается больше, как и больше усилий на поддержку этих ваших тулзов-оберток (в джаве они околонулевые, есть же поддерживаемый всем миром спринг). Но при этом это не то чтобы __тяжело__ делать, обычно достаточно просто сделать нормально и продумано один раз, а дальше просто версии обновлять и добавлять фичи по мере необходимости.
А вот если всего этого нет, то каждый берет то, что считает нужным, и начинается ебучий ад, особенно когда какой-то особо одаренный всунет говно вроде go-micro.
>Бойлерплейт кода по сравнению с джавой действительно получается больше, как и больше усилий на поддержку этих ваших тулзов-оберток (в джаве они околонулевые, есть же поддерживаемый всем миром спринг).
И всё это ради того, чтобы пилить очередной распределённый монолит?
>Зато в обмен получаешь простой и читаемый код
Этот буллшит еще работал лет 7 назад, но сейчас то с какого места дует этот бред?
Схерали бойреплейт код стал легко читаем? Ты ассемблер легко читаешь? Максимально просто же. Развесистая портянка кода, этот го, что писать муторно, что читать.
Без студии разработка игр, так же увлекательно как фронтент разработка без браузера. Лучше инвистируй время в годот/юнити расширение.
В жабе сейчас зеленые потоки, в шарпах асинки. У обоих все из коробки, шарпы не скучные, котлин молодежный. Как вообще определяли выгоду, когда го выбирали? Я джаву считал топорной, а это вообще пцц?
>распределённый монолит
Открою тебе страшную тайну: других архитектур не существует. Более того, опытные команды возвращаются обратно к монолитам с шардингом, когда окончательно заебываются изучать 100500 логов в секунду. Микропенисы красиво работают только в проплаченных статьях, на проде это сначала ад, потом пиздец.
Service oriented architecture, или вообще modular monolith. Модульный монолит это лучшее, с чем мне доводилось работать. Даже жяваскриптеры уже давно к этому пришли, у них это в nest.js из коробки.
Так это и есть классический монолит. Еще диды так писали. Охуительные истории про один гигафайл, в который собирается вся система - это выдумки маркетологов. В реальных системах каждая команда работает над своим модулем, модули могут лежать рядом в одной папке и ходить в одну бд, а могут быть на разных серверах, но это не точно.
Сценка "Джава-господин и убоGOе ничтожество"
J — На вас очередной раз помочилась жабка, "пись-пись-пись"))
Помочился на лицо
— Будешь ещё свою хуйню писать GOвноед?!
G — Не-ет, не буду, клянусь. О, великий джавист, отпусти убогого.
J Начал снова мочиться на лицо
— Что-что?) Я тебя не слышу-у)
Закончил мочиться
— Уходи! И скажи своим, чтобы со своим говнолангом не смели даже подходить к Электронной вычислительной машине! Устройство, подвергшееся твоему убожеству будет уничтожено!
G — Дя-а, господин, я все передам
GOвноед удалился, а джавист остался властвовать на троне
Заходит доктор (Д) с фамилией СэйШарф и говорит:
Д - Ну как наш больной поживает?
Сегодня будем хорошо себя вести? О, я думаю пора снять смирительную рубашку
J - ...вэФе ...мучану ...кэмэ
Д - Какие мы сегодня болтливые
медленно поворачивает за плече пациента
Д - Людмила, наш умелец снова начудил тут лужу, замените пожалуйста белье
доктор что-то записал в своем планшете и медленно вышел из палаты
Ничего не мешает, кроме того что на сотом импорте можно словить циклический импорт и придется половину переписать. Или где-то кто-то обновит интерфейс и будет увлекательно искать неделю те структуры которые его реализуют. А функция которая вызывается 100К раз в 1000 разных мест, неожиданно запишет в лог что ей поплохело. Но ты никогда не узнаешь где именно это произошло, потому что стектрейс для грустных.
— Майор Пайт(П), у нас серьезная задача, освободить господина J. Мне недавно поступила информация, что он находится в больнице некого "СейШарпа". Он сковывал его движения и читал.... Извините, мне тяжело об этом говорить. Он читал ему документацию голанга. Они сводят его с ума, Пайт!
П — Что.....
Пайт понимал, что господину J пришлось несладко, и щекочащий прямую кишку паяльник будет далеко не худшим исходом. Но проверить в такое было невероятно тяжело
— Он заплатит, он за все заплатит...
А еще, кто-то обязательно под усталость забудет вызвать что-то типа rows.Err(), ну или просто забудет записать единственную возвращаемую ошибку. В общем, увлекательные приключения плавающих ошибок в веселом монолите от го.
go кал получается и джава всех ебёт?
...вэФе ...мучану ...кэмэ (с)
Да, в том числе. Минусы будут?
>>295021
Какой профит от котлина на беке, когда у джавы каждые полгода-год новые релизы и половина фич котлина есть? Он разве успел набрать какую-то критическую массу вне мобайла?
Про шарпы ничего не знаю, но вроде бы __слышал__, что там с работой на линуксе проблемы. Какое актуальное состояние, без понятия вообще, но в целом стереотип такой, что шарпы для виндузятников. Ну и вроде под оборудование на заводах тоже пишут на шарпах из-за того, что миллиард софта-драйверов на винде.
>Как вообще определяли выгоду, когда го выбирали?
Легко вкатиться с любого ЯП.
Легко писать, читать и использовать все фичи языка -- всё максимально просто и понятно.
Работает быстро, собирается быстро, нет заумных систем сборки вроде градла.
Есть стандартная либа -- можно не зависеть от очередного RoR/Spring. Хотя в той же джаве спринг уже наверное де-факто часть stdlib.
Но вообще выгода при выборе ЯП для нового проекта определяется тем, на чем конкретно тебе быстрее стартануть (т.е. тем, какие инструменты и яп ты лично знаешь). В целом вон фейсбук частично на пхп работает, шопифай вроде на руби, и ничего, все живы.
Собсна, в вакансиях часто пишут что-то вроде "Требуем опыта Х лет бекенд-разработки, знание Го желательно, но не обязательно". И ты реально наймешь чела с любым бекенд-бекграундом и он быстро вкатится. В условной джаве ты так не сделаешь.
> можно словить циклический импорт
Это да, проектировали ебланы
> кто-то обновит интерфейс и будет увлекательно искать неделю те структуры которые его реализуют
Идешка покажет, кто реализует интерфейс
> функция которая вызывается 100К раз в 1000 разных мест, неожиданно запишет в лог что ей поплохело
Контект для этого и прокидывают, чтобы понимать, где, что, с какими параметрами сломалось
Писать можно что угодно. По факту наймут чела с 2X лет опыта на гошке на зп меньше, чем указано в вакансии.
почему?
Долбоеб не видит разницы между стажером из ВУЗа и вкатышем
>Идешка покажет, кто реализует интерфейс
То есть, го теперь тоже тыква без IDE как и жаба? Добро пожаловать в клуб.
>Это да, проектировали ебланы
Конечно, пока сам не словишь ц.импорт (и ловил же)
>Контект для этого и прокидывают
Говнофиксы с бойлерплейтом, которые в нормальном яп не нужны и усложняют б-логику
>но вроде бы __слышал__
У тебя весь твой текст из шаблонных фраз с ютуба. С шарпами все ок, на линуксах в облаках много бизнеса крутиться, мягкие сами потеют ради линукса, ибо вкусный пирог.
>Какой профит от котлина на беке
Та же джава, но меньше бойлерплейта.
>Легко писать
Лож, бойлерплейт не легко писать, крайне утомительно
>Легко писать
Лож, бойлерплейт трудно и пишется и трудно читать
>нет заумных систем сборки вроде градла.
Ну да, то то макфайлы это модно и молодежно, лол
>можно не зависеть от очередного
Еще один писатель софта из одной стандартной либы.
>Легко вкатиться с любого ЯП
100 неочевидных ошибок, тому доказательство. Начинай свой новый день с подводных камней кривого дизайна го.
Наслушаются инфоцыган и бегают то с питоном то с говном, мантра про то что на го легко развернуть проект, где каждый велосипедит свое, в то время как жабошарпы из коропки все давно сделано - просто смешно, то есть они самый главный недостаток переобули в фичу, лол
Официально только скрипт, плюсы и шарпы, а го котлины, расты, жс и прочие поддерживается над расширением, что практически обычно звучит как тухляк полуживого попенсорса.
Для этого надо занять очередь за розовым пони и единорогом.
>то есть они самый главный недостаток переобули в фичу, лол
так это есть суть Го, все недостатки из других языков переобувать в гениальные фичи
>так это есть суть Го, все недостатки из других языков переобувать в гениальные фичи
Жирнота то какая сначала я думал ты троллишь, но оказалось ты просто малолетних дегрод
Эх, сложно
О да, это ведь ключевая характеристика каждого ЯП, 14 килобайтный хв это вообще киллер фича си, все разрабы в срочном порядке делают сепуку во славу Денниса Ритчи и Страуструпа
Можно разделить на несколько, я брал doom 2 у друга на 10 дискетах. Вот он обрадуется когда на двух дискетах принесу ему хеллоуворд.
А помнишь как невыразительность из джейвы магическим образом превратилась в супер-крутую фичу в еще более невыразительном go? less is more, just write more code? легко учить, легко передавать?
Мэйкфайлы из ада C++ стали супер молодежными
Калечная область видимость переменных через ИМЯ а не модификаторы, как в каком-нибудь питоне или джс - уоу, как круто, как удобно!
Там же сплошной выигрыш на выигрыше
>100 неочевидных ошибок, тому доказательство.
И линтер-ссука даже не скажет ничего если ты напишешь
switch(a) {
case 1:
case 2:
code()
}
Ну если ты готов покупать террабайтные диски для программ, которые могут занимать в сотни раз меньше места, то покупай. Я за качественное ПО, которое компактное и быстро работает.
Я вообще считаю, что раздувание современных программ - это рак, который надо выкорчевывать, а не потокать ему.
Имаджинировали ебало этого додика?
Когда станешь кабаном, тогда и будешь сишников красноглазых нанимать, чтобы они в твоем пиздатом ПО каждый байт экономили
Правда, к моменту выпуска MVP тебя ждет несколько сюрпризов, но об этом потом узнешь
Что-то подобное я слышал в растотреде. Там еще добавляют про фанбоев и маркетологов.
Опционально сравнивают с си и си за решеткой, принося говнокод из этих языков
На расте хеллоуворлд тоже весит полмегабайта, получше го, но тоже слишком много по сравнение си.
>>295032
Монолиты сложно часто релизить, если команда разработчиков большая и нет QA. Будете буквально каждую неделю блокироваться о то, что в соседнем отделе вмержили баг, он попал на тестинг, там его чудом заметили и теперь надо ждать пока этот баг поправят, после чего релиз начнут заново пересобирать и пытаться выкатить на тестинг, где будут ждать аппрувов от всех разрабов всех команд.
Распределенный монолит рано или поздно превращается в обычный монолит, где будет куча зависимостей между модулями. Сам такое видел пару раз.
Самый топ - это микросервисы. Не потому что это модно, а потому что можно релизы хоть каждые 5 минут катать, если не ломаются контракты между сервисами. И это гораздо удобнее, чем ждать пока 60 человек скажут что они проверили свои задачи на тестинге.
>Мэйкфайлы из ада C++ стали супер молодежными
в го нет мейкфайлов, литералли 0 пердолинга с зависимостями.
Там еще можно std отключить и наколхозить с асемблерными вставками и будет как в си, но это чисто развлечения для специальной олимпиады. В продакшен ты один хуй потащишь библиотеки и этот мегабайт стнадартной библиотеки будет незаметным на фоне всего остального
>Ничего не мешает, кроме того что на сотом импорте можно словить циклический импорт и придется половину переписать.
Это да, удивило очень сильно. Года два назад как-то пробовал в качестве эксперимента написать апи для крудошлепста БД где-то на 30 таблиц, как раз копия дева была локально. Нагенерировал структур из sql и разложил все по полочкам, модели, интерфейсы репозиториев, реализации репозиториев хуё-мое, уже не помню вроде декораторы репозиториев с инмори кешированием написал. Компилирую и получаю большой хуй из-за импортов, в итоге закончилось тем что я собрал все в одну большую папку и тогда заработало.
С тех пор у меня отбило все желание перекатится на го, хотя количетво вакансий выглядело перспективным.
>>295235
>Или где-то кто-то обновит интерфейс и будет увлекательно искать неделю те структуры которые его реализуют.
>>295393
>Идешка покажет, кто реализует интерфейс
А кстати как решается этот вопрос при командной разработке? Неужели так вручную приходится искать все реализации при помощи ide и потом править внимательно глядя на то не проебал ли ты какую-то структуру. Или есть какие-то линтеры, комментарии в структурах и тп?
Мимо
>А кстати как решается этот вопрос при командной разработке? Неужели так вручную приходится искать все реализации при помощи ide и потом править внимательно глядя на то не проебал ли ты какую-то структуру
Го компилируемый язык, поэтому при компиляции у тебя все структуры, для которых ты забыл заимплементить интерфейс, покажутся в выводе ошибки компилятора.
Линтеры или комментарии для такого не используют.
То есть получается что в коде так или иначе ты передаешь структуру в метод где тип аргумента интерфейс и именно там оно и наебнется на этапе компиляции?
Распределённый монолит это мемное название микросервисов
Да, но может наебнуться и в рантайме, если у тебя в аргументах функций interface{} везде.
>Го компилируемый язык, поэтому при компиляции у тебя все структуры, для которых ты забыл заимплементить интерфейс, покажутся в выводе ошибки компилятора.
Далеко не всегда, может и в рантайме запаниковать.
начал хорошо, но пережирнил в итоге
Там они даются не в контексте зависимостей
> НАХУЙ не нужные интерфейсы
> голенг разработчики НАХУЙ никому не нужны
> Работу ты НЕ НАЙДЕШЬ, у тебя НЕТ ШАНСОВ
тыскозал?
> я бы посоветовал начать с python чтобы начать работу уже ЧЕРЕЗ МЕСЯЦ обучения
Ох уж эти экстраполяторы одной ситуации на весь рынок
Поэтому в го принято объявлять интерфейс рядом с использованием.
жирно
>У тебя весь твой текст из шаблонных фраз с ютуба.
Да. Я же написал, что описываю стереотипное мнение, а сам деталей не ебу.
>Та же джава, но меньше бойлерплейта.
Куда ещё меньше? Что в котлине для бека есть такого, чего нет в последних джавах?
>Лож, бойлерплейт не легко писать, крайне утомительно
Спринг учить тоже нелегко и утомительно.
>Еще один писатель софта из одной стандартной либы.
Ещё один "а давайте импортнем VasyanLib.jar", похуй чо там потом будет.
>100 неочевидных ошибок, тому доказательство. Начинай свой новый день с подводных камней кривого дизайна го.
Про любой ЯП можно так сказать, и в любом ЯП ты сможешь найти кучу неочевидных мест, чтобы обосраться.
>Ну да, то то макфайлы это модно и молодежно, лол
Makefile скорее для свистоперделок вроде линтеров, генерации протобафа и деплоя используют. Для сборки достаточно одной команды, всё остальное, включая подтягивание зависимостей, само отработает. Никаких мейкфайлов.
>то есть они самый главный недостаток переобули в фичу, лол
Ну да, сделали ЯП для любителей такого подхода. А зачем нужен ещё один ЯП с местным спрингом, когда уже есть джава со спрингом?
>>296328
Рыночек в очередной раз порешал, стоимость времени, которое смузихлеб потратит на оптимизацию RAM/Storage будет в разы дороже, чем покупка и установка этого самого железа. Зачем, если можно делать бизнес-таски по перегонке новых жсонов?
>>296766
>Открыл вебинар от озона, первое с чем знакомят это мэйк файлы.
Пришел в ПНД, первое, чем кормят -- говно двусмысленно вышло
>>296442
Циклические импорты иногда боль, да.
>У тебя весь твой текст из шаблонных фраз с ютуба.
Да. Я же написал, что описываю стереотипное мнение, а сам деталей не ебу.
>Та же джава, но меньше бойлерплейта.
Куда ещё меньше? Что в котлине для бека есть такого, чего нет в последних джавах?
>Лож, бойлерплейт не легко писать, крайне утомительно
Спринг учить тоже нелегко и утомительно.
>Еще один писатель софта из одной стандартной либы.
Ещё один "а давайте импортнем VasyanLib.jar", похуй чо там потом будет.
>100 неочевидных ошибок, тому доказательство. Начинай свой новый день с подводных камней кривого дизайна го.
Про любой ЯП можно так сказать, и в любом ЯП ты сможешь найти кучу неочевидных мест, чтобы обосраться.
>Ну да, то то макфайлы это модно и молодежно, лол
Makefile скорее для свистоперделок вроде линтеров, генерации протобафа и деплоя используют. Для сборки достаточно одной команды, всё остальное, включая подтягивание зависимостей, само отработает. Никаких мейкфайлов.
>то есть они самый главный недостаток переобули в фичу, лол
Ну да, сделали ЯП для любителей такого подхода. А зачем нужен ещё один ЯП с местным спрингом, когда уже есть джава со спрингом?
>>296328
Рыночек в очередной раз порешал, стоимость времени, которое смузихлеб потратит на оптимизацию RAM/Storage будет в разы дороже, чем покупка и установка этого самого железа. Зачем, если можно делать бизнес-таски по перегонке новых жсонов?
>>296766
>Открыл вебинар от озона, первое с чем знакомят это мэйк файлы.
Пришел в ПНД, первое, чем кормят -- говно двусмысленно вышло
>>296442
Циклические импорты иногда боль, да.
>Спринг учить тоже нелегко и утомительно.
Ты либо недельку учишь спринг, либо год пишешь его сам. Все просто.
>недельку учишь спринг
Потом ты вспоминаешь Евгения Борисов с его "потрошителями" и понимаешь, что даже на корку у тебя уйдет не один год, лол
>Потом ты вспоминаешь Евгения Борисов с его "потрошителями" и понимаешь, что
за использование BeanPostProcessor и иже с ним, надо пиздить.
Ты ничего сложнее крудов не писал на спринге. Бинпостпроцессор полезная фича для серьезных проектов
>Ты ничего сложнее крудов не писал на спринге. Бинпостпроцессор полезная фича для серьезных проектов
Именно что писал и наелся этого говна выше крыши. Добавляешь новый бин, и у тебя отвалится вайринг в месте которое ты вообще не трогал. Спринг вместо простого и легковестного DI, которым он был изначально, стал современной WebSphere.
Я считаю что конфигурация спринга должна быть простой и понятной, а если тебе нужен BeanPostProcessor значит ты делаешь что-то не так.
>Рыночек в очередной раз порешал, стоимость времени, которое смузихлеб потратит на оптимизацию RAM/Storage будет в разы дороже, чем покупка и установка этого самого железа. Зачем, если можно делать бизнес-таски по перегонке новых жсонов?
Двачую, в большинстве проектов похуй на перформанс языка, вообще можно спокойно делать бек на питоне/ноуджс/руби/пыхе, ресурсы железа нынче очень дёшево стоят.
>Ты либо год учишь спринг, либо недельку пишешь его сам.
Пофиксил
>Все просто.
Тебе с дивана конечно же виднее
>Рыночек в очередной раз порешал, стоимость времени, которое смузихлеб потратит на оптимизацию RAM/Storage будет в разы дороже, чем покупка и установка этого самого железа. Зачем, если можно делать бизнес-таски по перегонке новых жсонов?
Именно так мы и думали когда писали нашу систему, благо у нас есть инстансы с 600 Гб RAM/256 CPU. Но в какой-то момент перестало хватать и их. И тут внезапно выяснилось, что можно в 50 Гб RAM/16 CPU ужаться. Достаточно копеечный, советский... убрать лютый говнокод и дублирование данных
Наткнулся на канаты в телеге с задачками.
В основном всё ясно и понятно, но есть несколько которые я нихуя не понимаю почему так.
1) https://go.dev/play/p/c20CL1FuMeD
Почему ./prog.go:10:9: 1 << unsafe.Sizeof(x) (8 bits) too small for shift of 8
Какого хуя там другой тип стал во второй функции?
2) https://go.dev/play/p/9Ag3TjdaY_f
Куда делся println? Почему он не выполняется?
> Куда делся println? Почему он не выполняется?
Потому что горутина не успевает отработать и main завершается быстрее
К слову о том что не достаточно взять "быстрый" язык. Писать оптимизированный код это отдельная инвестиция времени и, что важно, ума.
Бенчи techempower тому доказательство.
То есть, человек, который думает, что возьмет го/раст/zig/ассемблер и выиграет с этого, чаще этот человек некомпетентен в вопросе оптимизации и пишет обычный, неоптимизированный код.
А, так вон оно что Goexit делает...
Интересно, а что нибудь из пакета runtime в проде вообще используется?
Ок, а легче писать и поддерживать то что? Вряд ли тут руби и ноджс особо проигрывают в этом
Всё, что не го. В руби рельсы, в пхп симфони и ларавель, в питоне джанго и фастапи, в джаве спринг, в ноде нест и фастифай, а в го голый роутер да и всё, лол, остаётся писать велосипеды, очень весело и продуктивно.
Гино это для тяночек..
> В руби рельсы
Это увлекательный мир, ты очень быстро пишешь круды, генерируя из терминала, потом очень долго и больно решаешь всяки N+1 проблемы, а еще там много магии и писать можно всякую хуйню, которую хуй прочитаешь. На рельсах удобно пилить проекты которые отдал заказчику и забыл, но очень больно это говно поддерживать
В бигтехах, где я работал, и Go использовался как основной язык, было одно общее условие - написана общая PaaS/фреймворк/библиотека на которых пишутся все сервисы в компании. Она была отлично задокументировна + были внутренние каналы на 5-10к инженеров где тебе за 15 минут помогут с каким-то вопросом по этой вундервафле.
Так что если это условие соблюдается - на Go писать продакшен отлично. Если никакой инфры для Go в компании нет - лезть туда не стоит, и проще писать сервисы на том же Node.js + Typescript + Fastify/Nest или спрингоговне, иначе ты заебешься настраивать проект, затаскивать гошные либы, линтеры, кодгены, мидлвари, и делать очередной extra-super-modern-toolkit-template для го разработки в компании. Можно конечно взять и написать свой PaaS для конторы только это пиздец как дорого, и тебя с вероятностью 99% пошлют нахуй, тк под это выделяется целый стрим и отдельные команды/бизнес юнит.
Так что если там где ты работаешь, под го нихуя нет то бизнес пиши на любом ЯП где все есть заранее а на гошке решай чисто инфровые/devsecops задачи.
Он ещё не доделан нормально, так что хз. Но там суть в том, что код на го компилится в объектник, который нормально линкуется с объектниками на С/С++, можно дёргать функции оттуда без CGo (и наоборот), и даже можно будет пользоваться указателями на аллоцированную в си память, а вот это пока не доделали.
Так что хз как сейчас, но вообще кто-то пользоваться точно будет.
Прост в вузе на алгосах мы писали на крестах и питоне, где вживую было видно что плюсы прям неебаца быстрее петухона, некоторые задачи на с++ проходили просто тупым брутфорсом, когда на питоне приходилось кочевряжится. Из за чего у меня появился шаблон что все что не плюсы медленное говно, но вот я уже почти как полгода стажируюсь на го и не понимаю, он медленный или быстрый, нет возможности запустить какой нить алгоритм и сравнить, мне просто дико влом решать алгозадачи, тем более на го
Точнее я знаю что он быстрее большинства, но тип... насколько? На нем в случае чего можно не усираться в этот невидимый коэффициент перед O(n log n)?
В общем да, хотелось бы получить какой то общий ответ
>Аноны, подскажите пж, насколько го шустрый?
Средне. Скажем так... он быстрее джавы раза в 1.5. Быстрее ноды раза в 2. Быстрее пхп раза в 2.5. Но! С дотнетом/сишарп не всё так однозначно. С/С++ проигрывает всухую. Rust'у просирает ну где-то процентов на 15-20. Короче быстрый, но не супер быстрый-быстрый.
>го вообще только
вообще хрень никому не нужная. В нём нет abi ос- ориентированных вообще, только транспиляция в с-abi компиляторы.
На выкид в общем то, ещё одна ненужная хрень вермишельная.
А нахуя оно в языке, ориентированном на веб сервисы? Вы блядь плюсовики свой язык перегрузили килотоннами говна так, что ни один человек на планете не знает С++. Пока познакомишься с вагоном хуерги из нового стандарта, забудешь старые. Не зря Торвальдс любителям добавить в языки новые возможности в лицо ссыт и к ядру не подпускает.
>Не зря Торвальдс любителям добавить в языки новые возможности в лицо ссыт и к ядру не подпускает.
Дааааа, ведь так весело писать аналог этих новых функций, но только не в одну строку, а во все 15. Поссал на ебало всем тебе подобным
Там зеленные потоки с диспетчером и гц каждые 10мс в ущерб проца, он априори не может быть быстрым.
В реальных тестах (не искусственная хрень) и реальных приложениях он сосет даже у жабы, причем в асинхронных тестах где должен быть быстрее.
Так же можно увидеть что в топе techempower находится го, но все это сокетные огрызки от настоящего http протокола (чаще на базе fasthttp).
Реальный перформанс где-то на корутинах котлина. К сожалению зеленые потоки имеют недостаток в сравнение с донтвэй асинк/авэй
Что насчет питона, то медленнее него только руби или кривые приложения на других языках (даже на Си и С++).
И да, не важно быстрый язык или нет, писать оптимизированный код это отдельный скилл. И если ты думаешь что ты умеешь писать "быстрый" код, то это не так.
Но в итоге го достаточно производительный по меркам промышленного программирования. Да и какая тебе разница, ты что ли железо кабану покупаешь?
Любой, кто хочет писать т.н. быстрый код, должен уметь делать профайлинг.
Если человека закидать всякой хуйней для профайлинга, у него наверное вся хотелка писать оптимизированный отсохнет. Делать оптимизации просто так признак дурачины.
И да, гошка/шарпы на железке имели около 40-60к запросов, а потом подключил код работающий с базой, и все упало до 1-3к
То есть, хоть на питоне пиши, все равно в i/o упрешься.
Стоит отметить у жабы шустрый драйвер к базе, на этом все, срыг, тормозная херотен
Ну простой пример из моего проекта: есть роут с контроллером GET /data, есть функция которая что-то читает с БД, из файла, занимается marshalling/unmarshalling. И на половину из этих ошибок надо отправлять разные http статусы и сообщения клиенту.
Писать errors.New("db fail happend") не хочется, к тому же проверять в родителе это как? Посоветуйте куда копать.
В java, python и прочем ооп можно было в catch выбрать нужную ошибку и соответствующе отреагировать. Но в го такого механизма нет (либо он выглядит как-то иначе)
Обычно принято заводить свои ошибки под определенные кейсы для каждого слоя приложения. Например, в твоем случае:
- в пакете storage(предположим, в нем у тебя слой работы с БД) ты создаешь файлик errors.go и объявляешь в нем релевантные для твоего кейса ошибки(ErrNoRows, ErrEntityDoesNotExists).
- в пакете, где работаешь с файлом, логика та же - заводишь кастомные ошибки(ErrInvalidFile, etc...)
- для валидации, маршаллинга/анмаршаллинга аналогично
В итоге в коде твоего хендлера используешь errors.Is() или errors.As(), например такой вызов:
resp, err := usecase.GetData(); err != nil {
switch {
case errors.Is(ErrNoRows):
response.SetCode(404)
response.SetData("отсутствуют данные")
return nil
case errors.Is(ErrInvalidFile):
response.SetCode(400)
response.SetData("невалидный файл")
return nil
default:
response.SetCode(500)
response.SetData("что-то пошло не так")
return nil
}
}
Схему максимально упростил, по хорошему можно еще обобщать ошибки на временные/постоянные и дополнительно изменить логику их обработки(так же через пакет errors).
>либо он выглядит как-то иначе
this
Создаешь новый тип для ошибки и возвращаешь его. Наверху делаешь errors.Is/As() и отправляешь соответствующий HTTP код.
Или можно не создавать свой тип, а просто
fmt.Errorf("DB read failed: %w", err)
при условии, что условная база имеет свой тип для ошибки.
https://go.dev/play/p/c2UIni-E2ep
Но лучше все таки создать свой тип, так надежнее.
Как разница, что там оператор ветвление что тут?
Офигеть победа
match result {
Err(nil) => return nil;
Ok() => {
// еще один отступ для бога ветвления
}
Самая лучшая реализация ошибок в системном языке это в зиге
>Как разница, что там оператор ветвление что тут?
У тебя в говне ошибка - это строка.
>Самая лучшая реализация ошибок в системном языке это в зиге
Пили пример.
Так по факту вопросы легкие, спрос на го разрабов ебанутый, я открыл резюме с накрученным опытом до 3+ года и мне хрки сразу срать начали в личку
>У тебя в говне ошибка - это строка.
У тебя в голове говно. Буквально двумя постами выше написано про бест практисиз касательно ошибок.
У меня почти 3 года опыта на го, общего опыта 5 лет. Из них 4 в бигтехе, и че то хрюши нихуя не пишут. Последнюю работу нашёл проспамив 100 вакансий. Чяднт?
Скидывай резюме с замазанными личными данными.
>Обычно принято заводить свои ошибки под определенные кейсы для каждого слоя приложения. Например, в твоем случае:
>- в пакете storage(предположим, в нем у тебя слой работы с БД) ты создаешь файлик errors.go и объявляешь в нем релевантные для твоего кейса ошибки(ErrNoRows, ErrEntityDoesNotExists).
>- в пакете, где работаешь с файлом, логика та же - заводишь кастомные ошибки(ErrInvalidFile, etc...)
>- для валидации, маршаллинга/анмаршаллинга аналогично
>
>В итоге в коде твоего хендлера используешь errors.Is() или errors.As(), например такой вызов
Я сам до этого всего додумался. Тоже пишу свои кастомные типы ошибок на каждом уровне, а потом прокидываю их по цепочке вызовов выше, в handler и там уже либо ифами, либо свитчем делаю обработку и выставляю нужные коды ошибок. А бывает, что еще на уровне сервиса надо выстраивать обработку ошибок, причем довольно громоздкую.
И по факту ведь кал получается, абсолютно нечитаемая write-once параша.
После питухона или жабы кажется что это какой-то совсем неправильный подход.
Дело в том, что развитием го занимаются долбоебы. Они не следят за разработками в других языках, они придумали манямирок "мы из гугла мы крутые ебать" и живут в нем. На любую справедливую критику хуле все так через жопу ответ один - это говей, пиши err!=nil и не выебывайся. Похожая хуита происходит в яндексе, только там шизы пишут круды на плюсах и пилят свой никому нахуй не нужный userver.
Рил странно, потому что меня тоже хрюши на куски рвали, когда я открыл резюме с 2,5 года опыта на го, 5 в сумме.
Лол, как только го попал в настоящую разработку, люди сразу начали придумывать эксепшены.
Спасибо дедушкам из гугла за обработку ошибок руками.
>это говей, пиши err!=nil и не выебывайся
>>305124
>Лол, как только го попал в настоящую разработку, люди сразу начали придумывать эксепшены.
>Спасибо дедушкам из гугла за обработку ошибок руками.
Эксепшены хорошо работают до тех пор пока у тебя линейный код в одном потоке. А как только у тебя появляется асинхронные функции/корутины/легковесные потоки всё резко усложняется и появляются все эти AggregateException, coroutineScope и прочие ExecutionException. Со всякими ахуительными шаблонами типа:
} catch (ExecutionException e) {
throw e.getCause();
}
https://www.codeguru.com/csharp/async-methods-exception-handling/
https://medium.com/mindful-engineering/exception-handling-in-kotlin-coroutines-fd08e622360e
https://www.reddit.com/r/java/comments/1co8gew/exception_handling_and_structured_concurrency/
И на фоне этого пиздеца, гошные ErrorGroup вполне себе нормально смотрятся.
>Го быстрее джавы раза в 1.5. Быстрее ноды раза в 2. Быстрее пхп раза в 2.5.
Быстрее пхп в дохуища раз, быстрее ноды процентов на 30... Медленнее джавы в 1.5 раз
У тебя фреймвёрки несопоставимы. Ларавель - это комбайн, который умеет всё на свете, а горилла-мукс - это обёртка над стандартным гошным хттп-сервером, там функционала минимум. В джаве надо Spring сравнивать.
Значит проблема в резюмбе.
Я открыл резюме мне в первые 2 дня 56 просмотров и 6 собесов назначили, я без откликов получил 2 офера 260+к
В сишарпе такие конструкции скрыты внутри фреймворка, их никто не пишет. Вызываешь .Result и оно само пробрасывает эксепшены, если надо. В гошке ты как проклятый пишешь err!=nil снова и снова, весь код засран этим говном.
>В гошке ты как проклятый пишешь err!=nil снова и снова, весь код засран этим говном.
Можно не писать на говне? Алсо, а макросы у вас есть? Для какой-нибудь подобной фигни, например, в си при пользовании либы курсес я тупо макросами оборачиваю как надо.
>пишешь err!=nil снова и снова
Это специально придумано, чтобы каждый раз задумывался как правильно обработать ошибки, а не свалить всё на самотёк.
Потому что пидораст маркетингом занят, а го серьёзные люди делают, им не до завлекушных соевых свистоперделок типа стопятисотого нескучного объяснения системы владения.
В го есть http огрызки на базе фаст-хттп. Там даже где-то на оффсайте это пишут, но зеленные продолжают таскать сокетные тесты с роутером, против реальных фреймворков.
На сайте
https://www.techempower.com/benchmarks/#hw=ph&test=plaintext§ion=data-r22
дефолтный го в 10 раз медленней топовых решений на других языках, это его реально место, не быстро, но и не медленно.
>Можно не писать на говне?
Да, тебе выше говорят бери шарп, если нужен хорошо задизайненный язык.
Тебя обманули, авторы просто сэкономили и ни реализовали никой обработки вообще.
Вот так можно было сделать.
помогите плиз
понятно что хранить ее будем не в базе а в файловой системе
но как все сделать чики пуки не понятно
Да никто эти фастхттп и файберы в проде не использует
>понятно что хранить ее будем не в базе а в файловой системе
Почему не в базе? Современные субд уменют в партиционирование.
Подскажите, а как в Go относятся к тому чтобы в одном методе репозитория было несколько сырых SQL-запросов? Ну например когда объект с внешними ключами или есть ассоциативные таблицы, и чтобы его создать нужно внести записи в несколько таблиц. Какой в таких случаях хороший тон: все делать в одном методе или разбивать на несколько и вызывать все из сервиса? Меня смущает что методы выходят очень громоздкие
Оно же у тебя завёрнуто в транзакцию? Одна транзакция − один метод. Если не завёрнуто, то стоит сперва озаботиться хорошим тоном в работа с бд.
Если совсем громоздко получается, то можно использовать DTO.
Открой для себя хранимые процедуры.
Да, собираюсь заворачивать, только я хотел завернуть в одном методе как ты предлагаешь, а коллега считает что нужно вызывать все четырьмя методами из сервиса, где каждый метод корреспондирует таблице в которую вносим записи
И управление транзакцией всплывает на уровень сервиса? Звучит как делай по букве из солида ради буквы из солида, а на остальное похуй.
Если уж делить, то всё равно сделать один основной метод, который будет вызывать мелкие методы внутри.
Есть задача, в ней надо считать три цифры через пробел с клавиатуры. ЧатЖПТ предложил мне решение с пика 1. Но оно не работает. Интернет мне подкинул ответ в виде пика 2, но пробел же вроде входит в ASCII и с ним не должно быть проблем?
Не работает − отдебажь. Напечатай сначала input после ввода, потом parts после деления. Поймёшь, в каком месте не работает.
Тебе же надо научиться понимать, в каком месте ошибка, а не зелёную галочку за решение задачки.
Алсо, второй пик не про это вообще, а про руны vs байты. С цифрами, латинскими буквами, пробелами и пунктуацией проблем нет, разница появится, когда кириллицу и другие алфавиты будешь использовать. И вообще у тебя в коде ничего этого нет.
а, ну раз ты скозал, говно заумное, то так оно и есть
Так же, как и везде -- вообще не очень, но it depends. Подход ничем абсолютно не отличается от других языков.
Какое же муторное говно (мимо проходил и сел это читать). Ради чего "старые из гугла" это придумали? Чем это отличается от того чтобы просто прочитать файл?
нахуя?
Пиздец конечно, крудошлёпу СЛОЖНА
А нахуя мне жирного кормить?
Любой нормальный разработчик, может открыть доку где зелёным по черному расписана мотивация.
Идти на оранжевый за ответами - признак тролля/долбаеба. Ярлык сам себе повесь, какой больше нравится
И опять:
>При этом как обычно читают жопой.
Я с самого начала про это писал.
>И на фоне этого пиздеца, гошные ErrorGroup вполне себе нормально смотрятся.
Разница в том, что в Го тебе сразу говорят, что ты будешь ручками обрабатывать ошибки, а в шарпе тебе обещают что эксепшены просто работают*.
>Любой нормальный разработчик, может открыть доку где зелёным по черному расписана мотивация.
Это верно для нормального языка, но где об мотивации написано тут??
https://pkg.go.dev/embed
>Идти на оранжевый за ответами
Да я уже понял что ты сам не знаешь.
Да, эксепшены в шарпе просто работают, сам к этому выводу пришел и не надо руками имитировать исключения на каждый пук - а просто берешь и пишешь в нормальном флоу.
Package embed provides access to files embedded in the running Go program.
Go source files that import "embed" can use the //go:embed directive to initialize a variable of type string, []byte, or FS with the contents of files read from the package directory or subdirectories at compile time.
For example, here are three ways to embed a file named hello.txt and then print its contents at run time.
Embedding one file into a string:
Тебе в первом же абзаце написано, что пакет дает тебе возможность встроить файл в программу и сохранить значение в переменной. Не заниматься ебаниной, вроде чтения из файл самостоятельно т.к чревато разными ошибками побочными эффектами и т.д. Мотивация - дать тебе инструмент? Смекаешь?
У нас в го и GC есть, хотя вот живут же ЯП без коллектора и ничего. А диды так вообще на перфокартах хуярили, зачем надо было все эти асмбли, фортраны, лиспы и прочую залупу с абстракциями выдумывать
Мы говорили о мотивации, ты высрал свою, а там о мотивации не было ни слова, значит ты звездобол получается? А криков то было.
Я читал и без тебя описание этой техи, и я спросил, нахрена деды ввели целую новую семантику в язык, ради сахара вида File.readAll()? Но при этом все до блюваты пишут err != nil ??
Диды ввели сахар для безопасности и быстродействия
По поводу обработки, то я нигде не говорил, что кайфую с err != nil охуенным дизайнерским решением. Но трай/кэтчи мне нравятся ещё меньше. Потому что с заковыристой бизнес логикой гошные подход обработки ошибки дает большую информативность.
Я к тому, что какую-то херонину добавили, которая нужна пару дедам в гулугулу, а главный геморрой языка не трогают, мотивируя что наш язык неизменяем и консервативен.
Вообще я мимо проходил, упаси на говне писать.
В идеале сервис не должен знать про транзакции, транзакции должны быть чисто на уровне абстракции репозитория, тк это часть работы с внешним плагином бд, а не чистой бизнес логики, которая относится к сервису.
Ну и транзакции желательно делать поменьше, бд как примитив синхронизации это не супер кул. Отсюда следует, что ты в среднем не хочешь делать транзакции длиною в жизнь (вне зависимости от яп).
Это все вообще к го не относится, просто общие архитектурные принципы, которые иногда при большом желании можно нарушать.
>Ну и транзакции желательно делать поменьше, бд как примитив синхронизации это не супер кул. Отсюда следует, что ты в среднем не хочешь делать транзакции длиною в жизнь (вне зависимости от яп).
Ну, про супер долгие транзакции речь не идет. Но вот на текущей работе у нас прям как обязательное правило принято, что сценарии бизнес-логики обязательно должны быть под serializable транзакциями, если хоть где-то в базу вставляем. И вообще правило такое, что если мы делаем select + update (пусть несколько раз из разных баз данных), то это всегда одна транзакция. Да, на базу данных у нас очень много чего завязано, мы очень строго следим за консистентностью данных.
Открываешь в сервисе, прокидываешь в репозиторий.
Транзакциями надо управлять явно, так намного ниже вероятность поймать дедлок, idle in transaction и прочие N+1 приколы. Все функции, которые ходят в бд, должны принимать транзакцию одним из аргументов. В хайлоаде ты должен четко понимать, где начинается работа с бд и где заканчивается, петушиный unit of work пусть остается в легаси говне с абстрактными фабриками.
Я пришел к подходу прокидывания транзакции через контекст. Типа такого https://github.com/avito-tech/go-transaction-manager
Но в гошке часто говорят, что использовать контекст для чего-либо помимо таймаутов, отмен и прочего -- моветон. И что никакую бизнес-логику туда нельзя пихать. А мне все-таки очень зашло использование контекста для транзакции. То есть методы репозитория умеют работать с контекстом и получается внутри одной транзакции можно довольно легко использовать разные методы репозитория. Просто в сервисе создаем контекст и передаем его в первый используемый метод репы, потом этот же контекст во второй и так далее, как угодно по логике. Уходит куча бойлерплейта с роллбэками и коммитами.
Если ты для себя пишешь, то похуй в целом. Я тоже люблю божественный объект туда-сюда гонять.
Так а почему все таки плохо использовать контекст для значений? Понятно что интерфейс контекста не очень подходит для этого. Но ведь и мы не ебланы. С хорошим враппером никаких проблем нет.
Скрываются зависимости. Вот кто-то написал эту хуйню, а тебе надо в ней разобраться, что-то поменять, и ещё оттестировать. И сразу хочется автору кода ебучку вскрыть.
>Типа такого https://github.com/avito-tech/go-transaction-manager
Гоферы изобрели срыг! Как перестать орать?
+ про время жизни данных ещё говорили
Допустим у меня http обработчик сидит в самом верху, дергает метод из пакета (будем считать для простоты, что у меня 1 application layer = 1 пакет) А, тот дергает метод из пакета В, тот дергает метод из пакета С. Каждый из пакетов имеет свою структуру для ошибок: ErrorA, ErrorB, ErrorC, которые я могу набивать всяким полезным контекстом, чтоб потом его высрать в тело респонса жсоном. Собственно два вопроса:
1. Как лучше сделать: чтобы пакет B при получении ErrorC оборачивал ее дополнительно своей ErrorB? Или ErrorB -- это чисто ошибки, относящиеся к самому пакету В? В первом случае вроде получается чето более-менее похожее на нормальный стектрейс, если у всех ошибок будет допустим какое-то поле Cause error, но тогда наверху у меня всегда будут только ошибки ErrorA, и если мне нужно разное поделать в зависимости от того, что же там за real cause была -- будет неудобно. Во втором случае стектрейса никакого нахуй нет, как такие ошибки например логгировать с пользой -- непонятно, но код проверки ошибок в обработчике становится хотя бы поприятнее.
2. В обоих этих случаях выходит так, что обработчик должен быть в курсе обо всех ошибках, которые могут произойти во всем ебаном приложении, то есть он должен знать и про ErrorA, и про ErrorB, и про ErrorC. Чето я слабо себе представляю, как такой подход будет скейлиться, если аппка становится хоть сколько-то большой (ну там на пару десятков эндпоинтов хотя бы). Какие есть альтернативные варианты? Я сам чето ничего не надумал более умного.
Имхо оборачивать, но своим интерфейсом, чтобы всё было одинаково и можно было размотать без гигаобработчика.
Вот самый простой вариант, на каждом уровне прикрепляешь предыдущую ошибку и какие-нибудь энтри сразу в жсон формате, чтобы в логи срать удобно.
Вложенные ошибки.
>Я пришел к подходу прокидывания транзакции через контекст.
Гоферы изобретают ООП. Сам ООП объект это контекст для методов внутри, при том у вас есть такой функционал, нахрена вы устаревшие процедурные паттерны используете?
Мыши плакали, кололись, но продолжали грызть кактус
>Пацаны, поясните за обработку ошибок.
Ее просто нет, страдай как хочешь.
Вместо семантики в языке и реализации чего-то в компиляторе - проще было выпустить статью, ошибки это значения и положить болт.
Когда я кодил на C# и JS я по-моему ни разу не использовал все эти уродские try/catch. А на подобные конструкции в коде я смотрел как на мусор) На пыхе с которой я начинал я вообще не знаю как обрабатываются исключения.
И только на Go я вполне уживаюсь с err != nil и даже допиливаю собственный няшный логгер
Смешно, во всяком случае.
>1. слайс "а" расширяется аппендом, и терь у слайса капасити умножается на два, и добавляется в строй цифра "5". // len(5), cap(8)
>2. слайс "а" передаётся функции "surprise", где происходит ещё один аппенд. // len(6), cap(8)
>3. цикл переписывает значения переданного массива на числа "5".
>4. выводит "[5 5 5 5 5 5]", и возвращается в функцию "main()"
>5. в самой "main()", ЭТОТ ЖЕ слайс "а" имеет, СУКА, ЗАМЕНЁННЫЕ ЧИСЛА НА 5, НО НЕ ИМЕЕТ АППЕНД ИЗ ФУНКЦИИ, ЧТО НА 15-Й СТРОЧКЕ!
ЧЯДНТ?!
имею ввиду, почему в случае замены значений всё срабатывает, и слайс меняется по ссылке, но аппенд не аппендится по ссылке, хотя капасити хватает?
можешь подсказать про "относительную сложность вката", почему цвет различается так сильно и от чего он зависит ?
тогда вообще не понял, почему при 16к ячейка отмечена зеленым цветом, а при 11к красным ? Если при 16к сложнее ?
И получается с каждым годом все легче вкатиться в го ?
месяцем хотел написать, но там даты странно стоят
1.5 года опыта в каком стэке?
ты не успел, вкат закрыт
ментальная модель в мозгу - ну это типо сигнатуры методов которые ты можешь присобачить к любому типу
при этом interface{} это интерфейс без методов, а значит по умолчанию выполняется всеми типами (потому что у типов типо может и не быть методов)
короче полная хуйня никак не пойму
а ведь это ключевая вещь (судя по моим путешествиям по коду стандартной либы и других популярных библиотек)
Второй вопрос (косвенно связанный с первым) У меня есть структурка (которая на самом деле джсон) мы ее маршалим анмаршалим
>type BaseMessage struct {
Method string `json:"method"`
Params map[string]any `json:"params,omitempty"`
Protocol string `json:"jsonrpc,omitempty"`
Id int64 `json:"id,omitempty"`
}
у этой структуры есть поле парамс внутри которых тоже есть вложенные структуры (их я тоже описал) и теперь внимание допустим мне надо делать аутенфикацию я создаю функцию
AuthMessageSend() и бла бла, допустим мне надо изменить параметр и я снова пишу функцию RewriteParamMsgSend() вообщем повторяемость кода, как решить проблему? я бы просто создал функцию send(params &BaseMessage) но теперь я как бы перетащил сложность из функций в ее вызовы
>никак не могу вкурить что такое интерефейс
duck typing курильщика. В обычной динамодристне - ты просто дергаешь методы Swim() и Fly() и все. В Го тебе надо объявить интрефейс Duck с этими методами и попытаться привести твой тип к типу Duck, если тип реализует все методы интерфейса - то приведение будет успешным.
>при этом interface{} это интерфейс без методов, а значит по умолчанию выполняется всеми типами (потому что у типов типо может и не быть методов)
Да, т.е. фактически это способ сказать - любой тип. Сейчас рекомендуется использовать any вместо него, то же самое, но более читабельно.
>у этой структуры есть поле парамс внутри которых тоже есть вложенные структуры (их я тоже описал) и теперь внимание допустим мне надо делать аутенфикацию я создаю функцию
>AuthMessageSend() и бла бла, допустим мне надо изменить параметр и я снова пишу функцию RewriteParamMsgSend() вообщем повторяемость кода, как решить проблему? я бы просто создал функцию send(params &BaseMessage) но теперь я как бы перетащил сложность из функций в ее вызовы
Используй дженерики https://pastebin.com/YFApzvVE
Просто я слышал какие дифирамбы поют языку, он на хайпе и востребован, и видимо инфоцыгане подхватили это.
На деле работы нет, а точнее для вкатунов - буквально чуть ли не 0, т.к. из-за сферы и задач (бигтех и микросервисы) - туда не берут с улицы и отбор с требованиями серьезные. Нужны мидлы+ одним словом, судя по вакансиям
А конкурировать с тобой будут скорее всего перекатуны, что делает шансы на вкат буквально нулевыми
Ну и есть еще возможность попасть на курсы и стажировку от какого-нибудь бигтеха, но там опять же ищут студентоту и этот вариант доступен только для ДС2/ДС2/Казани
В го не надо "вкатываться".
Т.е., если ты не умеешь программировать, то _не_ надо учиться этому на го.
Это сложный язык с кучей подводных камней.
Независимо от того, что говорят по этому поводу клоуны с ютуба и прочие инфоцыгане.
интерфейс это контракт
нах он нужен?
1. интерфейс нужен для инверсии зависимостей (5п солид), это когда ты напиздячил много структур, под них вхуячил кучи методов. потом начал их вызывать друг в друге и чтоб не соснуть циклический импорт ты используешь контракты вместо самих типов
2. в случае когда ты хочешь дергать разные структуры за метод с одинаковой сигнатурой (написав 1 функцию вместо 2х для разных типов), ты можешь дергать интерфейс(если обе структуры соответствуют твоему контракту интерфейса)
3. псевдодинамическая типизация (переменная при инициализации выберет тип а не про обьявлении), например ты хочешь любую структурку десерелизовать пиздячишь тип any/interface{}, кайфуеш.
но потом соснешь когда будешь угадывать какая модель тебе придет
есть стек бекенд,
это бд, кеши, очереди/шины, сети, cicd, тестирование, архитектура(на уровне приложения и бывает на уровне продукта) и какойто язык описания взаимодействия этого всего добра.
вот сейчас уже ты прикинул что у тебя будет на пеке dbeaver, git, оболочка sh + unixBasedUtils + возможно питон/руби, docker, postmant, wireshark/charles, miro/draw.io.
сам язык это дай бох 40% работы. остальное время ты ебешься с конфигом, ищешь баг в кафке, оптимизируешь запрос к бд, пишешь скрипт деплоя.
какой ты язык выбрал это мало решает короч
но у го минус в микросервисной архитектуре, даже там где она не понадобится, изза этого гошники на порядок лучше жавистов/питонистов/пыхеров знают devops практики, архитектуру, сети. именно поэтому тут не место вкатунам с нуля, хотя гдето на пыхе полгода посидите потом приходите
Все умные слова, перечислил, какие только знал, лол.
И язык ничего не решает, да.
Если пишешь систему учёта лайков.
Нарожали вас, эпигонов, на свою голову, лол.
Вкатился в Го почти с 0, имея не коммерческий опыт разработки на питоне/котлине.
Не пугай людей.
Хотя истина в том, что для вкатунов реально работы 0 + по опыту скажу, что очень сильно решает чуть-чуть выше базового знание Kubernetes. Как минимум написать простой хельмчарт должен уметь и понимать, почему тут деплоймент, там стейтфул сет и зачем нужен хпа с ресурсами.
Это копия, сохраненная 10 ноября в 18:23.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.