Go или Golang — компилируемый язык программирования от создателей таких шедевров, как UTF–8, язык С, UNIX, Plan9 и других. Go поддерживает типобезопасность, имеет богатую и универсальную стандартную библиотеку и инновационные семантики одновременности: все то, что мы в индустрии называем concurrency и parallelism. На сегодня язык Go является маяком стабильности, прагматичности, де-факто представляет из себя стандарт в мире бэкенд–микросервисов и серверного оркестрирования.
джуны, вы НИКОГДА не найдете работу на Go. Просто no chance. Но можете, конечно, выдрачивать год-полтора (проебёте время впустую), это язык для ОГРОМНЫХ сервисов, вы там нахуй не нужны, язык для миддлов+, сеньёров. Тратьте время дальше. Не верите - чек вакансии, мы не в пендосии.
>>3262439 Ето в пендосии вы никогда не найдете работу на го. А в РФ го теперь такой же мейнстрим, как пхп или питон. Кмк го вообще только в России и Китае взлетел, а на западе его используют только фаанги и бывшие джавашопы с кучей денег.
>>3262474 >>3262487 Упрощаю: покажите мне хотя бы ОДНУ джуновскую вакансию на Go в РФ. Одну! А остальным скажу - бегите! - в Go, если вы уже с хорошим опытом в backend, в QA/JavaScript, если вы новичок.
>>3262625 не, ну годная вакансия, но это Ростов-на-Дону и таких вакансий ОЧЕНЬ мало в этом и весь поинт. Да, с одной я погорячился, но шансы найти работу это не увеличивает. Вы просто посмотрите на другие стэки. Ну и главный да, ещё совет джунам не прыгать по языкам, выбирайте - учите BACKEND - если он вам так интересен, перескочить всегда сможете. Но выбирать Go первым - очень-очень сомнительно, это далеко не мейнстрим, мейнстрим это нода с пхп.
>>3262634 Гейткипер извивается как уж на сковороде: сначала нет вакансий, потом есть но мало и вообще это Росов-на-Дону и вообще идите в ноду или пхп вкатывайтесь, нечего тут это самое. Насколько нужно быть неуверенным в себе как в специалисте, чтобы бояться конкуренции от вкатунцов...
>>3262439 >это язык для ОГРОМНЫХ сервисов Представляю объем бойлерплейта в этих огромных сервисах на Go.
Go - это язык микросервисов. Причем довольно всратый, я поработал на проектах и с питоном, и с го, и на го довольно тяжело писать по сравнению с питухоном, где полно всяких фреймворков, которые позволяют обычную рестуху написать в х20 раз быстрее чем на гоуленге.
Мне кажется Go возможно скоро умирать начнет. Вижу популярные либы на гитхабе для Го с кучей звезд - очень часто встречаюсь на заброшенные проекты. Где последний коммит был года 3 назад. Или 5 лет назад. Там какие-то issue копятся, но поддержки как таковой уже нет.
А в js и питухоне все наоборот, куча популярного тулинга пилится огромными сообществами и не забрасывается.
>>3262835 Блять, кто нахуй на этот буллшит поведется, видимо тот, кто ни разу серверную лапшу на пистоне не видел, ну не мудрено, видевшие вырвали себе глаза и не видят уже ничего.
>>3262848 Асинхронный питон это лютое говнище. Вот это реально невозможно читать. Если вас приглашают на проект с асинхронным питоном в бекенде, то не идите туда.
Но обычный синхронный питон вполне неплох. Если есть цель быстро наговнякать, то самое то.
> Извините, а вы не знакомы с реактивным программированием? Наш проект очень быстро развивается и нам нужно эффективное и правильное и быстрое исполнение задач, поэтому нам нужны реактивные программисты. Хрюша тихо кидает резюме в урну и говорит В любом случае, спасибо, я вам обязательно напишу!
>>3262853 Бредятина. Вкусовщина. Ничем не отличается. Питон как питон. По структуре кода питонопроекты ничем от го не отличаются. Если сделать на го монолит такая же лапша будет.
Сап, как в go обстоят дела с gui? Необходимо сделать простой секундомер с возможностью вывода графика результатов. Что есть на рынке легкого, чтобы не тянуло за собой ничего, работало просто как компоненты и было кроссплатформенным? Пока из такого выцепил fyne, но мб еще что есть
Потрогал немного файн этот, нихуя не понятно, но достаточно интересно. Вопрос открытый. Есть ли какой-то стандарт для GUI на go?
>>3263141 google -> awesome go -> gui (сам попробую на wails пописать микропоеботу для себя, но пока не нашел, как у него обстоят дела с глобал хоткеями)
вы ебанулись заставлять юзеров грузит себе целую среду интерпретатора питона вместе с вашим кодом или вообще целый ёбаный хромо-браузер (!!!) (електрон)
Что мешает вызвать системный рисовальщик окон из go? или даже залупу-в-себе вроде QT кросплатформенную подключить
>>3263343 Вот как раз возник вопрос по теме. Как я понял для GUI есть два подхода: либо на основе web (использовать html/css/js и типо рендерить браузер для них), либо использовать нативные??? вещи типо qt или gtk Правильно понимаю, что второй вариант оптимальней\производительней\легче? Еcть какой-то хороший материал на эту тему, а то я ничего толкового не смог нагуглить, а разобраться хочется?
> системный рисовальщик окон из go Не подскажешь что это, пожалуйста?
>>3263343 Юзеры обычно неуважительно относятся к программам которые мало весят. Много весит - значит есть есть добро в программе. Не зря качал с торрента. Мало весит - хуйня ничего не умеющая.
Если ты что-то полезное гуешное на го напишешь, а не пустые окошки на винапи,то дистрибутив твоей программы тоже будет весить огого.
>>3262663 так и в чем я не прав в итоге? не, ну если готовы на стажировке год за дошик сидеть - дерзайте, может, и выйдет у вас что. На стажировку нормальную попасть тоже челлендж. А можно не страдать хуйнёй, например
>>3263341 > Что ты имеешь ввиду под глобал хоткеями? Мне нужно, чтобы приложение отрабатывало комбинацию клавиш, даже когда оно неактивно. В некоторых фреймворках такого нет, есть только локальные хоткеи, которые работают при активном окне приложения
>>3263745 > А всякие библиотек для хокеев это не то? Действительно, как то я и забыл про это. Первая же ссылка в гугле дает пакет с "Global hotkey registration without focus on a window".
>>3263341 >Имеешь ввиду с помощью электрона? Да, но ещё можно как вариант взять другие решение, которые не такие популярные, но лучше по перформансу, например tauri или neutralino.
>>3263343 На современных компьютерах (даже очень бюджетных) нет проблемы с тем, чтобы заставить юзера грузить целый ебаный хромого-браузер, не должно быть сильных тормозов.
Я как-то, в каком-то докладе слышал, что на го вебассембле не очень удачное вышло. Это было очередное предвзятое мнение или реально есть какие-то проблемы или неудобство?
А что, правду говорят, что сейчас все с Джавы мигрируют на Го? Или это маняфантазии и единичные случаи?
Как вообще оцениваете такую перспективу?
Только не надо объяснять о тоннах перфокарт с кобол кодом, который управляет 99% финансовыми транзакциями. Речь о новых проектах, никто же не хочет поддерживать легаси говно.
>>3267266 Срачи между языками начинают неполноценные люди, компенсирующие свои проблемы за счет выбора той или иной догмы. Поэтому зачастую если видишь хейтера - то он как специалист весьма неполноценный.
Единственным исключением является, когда используют агрессивный маркетинг и тебе навязывают кривую неудобную херню вместо нормального любимого инструмента. Так например сейчас растом, который пытаются пропихнут везде и так было с го, когда его питонистам натягивали, отсюда остаточный негатив на го.
>>3266932 В Тиньке гошное направление сейчас загибается. Начали очень бодро, но отсутствие созревшего фреймворка привело к адовому хаосу в проекте. Сейчас жаркие дискуссии идут об отправке большей части кода нахуй. Планируют оставить только микросервис связанный с брокерами сообщений. Походу спринг выйдет победителем, ибо опять начали жавистов искать.
>>3267484 Тинек это где выкинули основной фреймворк для джавы (spring) и написали свой велосипед kora? Думаю пример тинька не стоит приводить, там и на scala до сих пор пытаются писать.
>>3267266 >откуда начался срач с Javистами В этом итт треде он начался. А откуда ему еще взяться? Основной тейк был про то, что в го нет нихуя и нужно писать велосипеды, а в джаве все есть.
>>3267266 >как вы к нему относитесь Сначала был ярым сторонником джавы, активно хуесосил го в этом треде, потом семенил, притворялся разными постерами, отвечал на свои же сообщения, но в противоположном контексте, всячески понижал уровень культуры дискуссии в этом итт треде.
Сейчас я вкатился в айти на помойное python легаси и мне уже просто хочется побыстрее с питона срыгнуть в голанк.
>>3266932 Переписывать древние копролиты с джавы на го дело не совсем тривиальное, в том смысле что доставать проект из копролита нужно еще уметь, иначе получится хуета полная. Проще забить хуй и дождаться пока новый СТО не придет и не найдет бюджет на то, чтобы нанять компететнтых людей, которые смогут по нормальному вынуть проект из копролита.
Новые проекты сейчас наверное все же больше на гоуленге начинаются.
Пацаны, дайте мотивации изучать Go. Вырос из сисадмина в девопсы, но пишу только на баше по факту. Хочу изучить Go. Что такого охуенного можно написать на нем, в чем сильные стороны языка? Дайте мотивации Операторы для кубера писать не предлагать
Вопросы для практикующих: - я правильно понимаю, что итоговый скомпилированный файл из go может работать как на linux, так и на windows, если там внутри нет никакой платформо зависимой херни? - вызов баш команд будет считаться зависимостью от винды, или оно как-то хитро оборачивает?
>>3267963 >я правильно понимаю, что итоговый скомпилированный файл из go может работать как на linux, так и на windows, если там внутри нет никакой платформо зависимой херни
Если через go build собрать? Не должен. Как минимум формат исполняемых файлов в линухе и винде разный.
>>3267990 >Fiber Много на нём писал? Я 1,5 года с ним работал на прошлой галере и это натуральный шлак с кучей малосовместимого говна. При этом коды испралений в они принимают очень неохотно. Пользовали свой форк фреймворка с микрофиксами и 7 правленых либ контриба, которые уже никто не поддерживал. Тащемто в спринге такой хуйни нет.
>>3267484 Не слушайте этого хейтера. Сейчас все банки выкидывают на мороз джаваскуфиду и переписывают копролиты со спрэнг фримверка и хубирнейта на гоулэнг
>>3268043 >в тиньке изики и самые простые медиум МАКСИМУМ В тиньке полная копия процесса найма, которую взяли у яшки. Там точно такая же ебка литкодом на 3-4 секциях, секция на сисдиз и финалочка с менеджером где тебе популярно объяснят, почему 200к это норм зэпка для сеньора. Собесить тебя будут яйцеголовые порриджи из МФТИ, если что
>>3268293 600к в Москве у сеньора? В каких компаниях? Такая зарплата даже у тимлидов редкость. У меня есть знакомые с такой зарплатой, но это всё валютные удалёнщики.
>>3268304 >600к в Москве у сеньора? В каких компаниях? Ни в каких. 600к с улицы ты можешь получить, если устроишься лидом или руклем отдела по знакомству. 600к сеньке будут платить, если тот отмахал 10 лет в конторе и тянет проект с самого старта. С другой стороны 600к это 6к бакинских - зарплата стажера в какой-нибудь зарубежной конторе
>>3268302 Так в том и проблема, что никто до сих пор не написал нормального фреймворка. Файбер, джин, эхо это всё сахарок вокруг хттп роутера от одного гигапрогера. Они под копирку делают контриб репу, куда накидивают васянских адаптеров, мидлвари, плагинов разной степени паршивости. Часть из них теряет сопровождающих и загнивает до полной несовместимости с главной репой "фреймворка" (прости Господи). В итоге имеем "а вот на джине написали 10 авенсом сайтиков", галеры с зепкой до 80к от говнарей воннаби кабанов, бигтех, который пилит свой Т-велосипед.
>>3268767 По моему опыту из одной галеры и двух шараг с собственным продуктом, все ляпают как попало, а потом берут что-то из проверенного временем. Гошку оставляют только на узких местах. Хэтапе ручки удобнее и безопаснее дёргать полноценными фреймворками. Ссаный круд со всеми обвесами дюже сложно сколотить на голанге, вот и остаётся он уделом маргиналов. Однако, байтойобствовать в вебе, при острой нужде в параллельщине, на го одно удовольствие (сравниваю с крестами), но тёплое местечко искать было сложно.
> использование 90% в вебе и мелкая автоматизация (язык общего назначения).
100% Go
> нужно максимальное экономия по железке - cpu и памяти, то есть максимум выжать RPS на бюджетных vps.
Скорее всего тебе это не нужно. Разница в потреблении памяти у Rust и Ruby всего лишь в пару раз, а задрачивать перформанс в своём вебе на 1rps тебе нахуй не нужно и никогда не окупится
Поэтому Go
> все еще важна скорость разработки, насколько велика разница между го и раст (как между го и с++??).
>>3273517 >Какие не-Go-шные знания нужны Go-разработчику? Блять, нет такого понятия как КАКИЕ НУЖНЫ ЗНАНИЯ. Все фирмы разные. Все проекты разные. Одним нужно одно, другим нужно другое. Спроси МТС, web3-стартап, госкомпанию и ещё 10 компанию и ты получишь 10 разных ответов. Тебе МТС скажет, нам нужен Go, gRPC, Kafka, PostgreSQL, Redis. А web3 стартап стажет, нам нужно знание polkadot, блокчейна и всё такое.
Это надо смотреть ИН-ДИ-ВИ-ДУ-АЛЬ-НО!! Нет никаких "универсальных знаний" Нет никакой "базы golang" Есть конкретный проект и конкретные знания
Го -- это для простых и очень эффективных сервисов, которые делают что-то одно и простое. Прямо как Юникс. Если пытаться только на нем построить какую-то большую развесистую систему, то насосешься хуев, потому что нет ни инструментов для этого, ни бест практик.
Вроде Си, когда на нем пытаются писать что-то большое, для чего он не предназначен, типа Gtk -- приходится все изобретать с нуля, криво и неудобно. А вот для маленьких простых утилит пушка-гонка.
>>3274812 >Вроде Си, когда на нем пытаются писать что-то большое, для чего он не предназначен, типа 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 Как перестать орать с этого унтершпрахе?
>>3275109 От флагов, компрессии и сишных либ зависит. У нас максимально говённо, но поставлено на поток. Пока компилишь одну фичу, пилишь другую и наоборот.
>>3275427 А то! Когда в твоем коде становится больше 1к строк, надо разделить код пополам, каждую часть вынести на отдельный сервер и дергать функции через tcp стек. Это модно, стильно, как в авито.
>>3275572 Если у тебя 100500 одинаковых крудов, то разбивать на микросервисы можно для горизонтального масштабирования и управляего распределения нагрузки на части. Но обычно все сводится к правильной работе с СУБД, если работа крудов состоит, чтобы ожидать ответ от СУБД и формировать жсон для фронтенда. Но вот у тебя появляются очереди и воркеры. Не так все однозначно становится. Например доске объявлений в сервисе с большим количеством пользователей потребуется очереди обрабатывающие загружаемые пользовательские изображения. Ты выносишь их на "отдельные сервера" чтобы более филигранно распределить нагрузки. Хттп ручки становятся наиболее простой частью приложения. Усложнение состоит не в количестве строк кода, а в том что становится удобнее изначально все проектировать через обработку событий, а хттп ручки оставить в тонком шлюзе.
С немного другой стороны. Ты делаешь доску объявлений несколько лет. Потом ты делаешь CRM. Какой смысл делать CRM на той же самой кодовой базе, которая к тому же устарела и требует рефакторинга для устранения технического долга? Чтобы потом рефакторить еще большее количество кода? Бизнес не может ждать. Ему нужны новые фичи уже здесь и сейчас. Более того, коммерческая разработка состоит большей частью из склеивания готовых решений от других бизнесов. В том числе селфхостед решений. Например зачем тебе писать свой SSO если ты можешь keycloack использовать в виде отдельно сервиса.
Не надо все сводить к моде на микросервисы. Даже в проектах, которые пилятся несколькими челами, им порой бывает легче что-то реализовать по-быстрому в одельном микросервисе, чем вспоминать что они 5 лет назад там писали.
>>3275572 >Когда в твоем коде становится больше 1к строк, надо разделить код пополам, каждую часть вынести на отдельный сервер и дергать функции через tcp стек. Потому что миллион строк кода, становится трудно поддерживаемым. А выносить можно и просто в библиотеку.
Ибифо: ко-ко-ко, а вот линупс ко-ко-ко
У линукса очень жёсткие процессы ревью кода, которыми занимаются профессионалы много лет работающие над ядром. И они не зассут сказать любому фаангу, что их патч в ядро говно и они его не примут. Потому там кодовая база в хорошей форме.
А в среднестатистической галере гребцы меняются раз в 1,5 года и попробуй скажи ПМ, что фичу надо пилить не неделю, а 2 месяца т.к. надо ещё зарефакторить кучу кода, чтобы всё было по уму. Поэтому миллион строк кода в одном сервисе, это практически неподдерживаемое говно.
Здесь чел делает примитивный и осознанно неправильный мьютекс
в пикрил методе же будет бесконечный цикл из которого нет выхода, потому что ни одна горутина не доберется до unlock. Если так, то почему прога у него работает и что то выводит?
>>3277428 Обычный спинлок. Кто-то первый проскочит цикл, остальные будут крутиться в цикле и ждать, пока первый не сделает m.state = false. Это неэффективно и без атомиков будут проблемы, но как демонстрация работает.
>>3262042 (OP) >- Ознакамливаемся с общим roadmap по изучению языка и сопутствующих инструментов: https://github.com/Alikhll/golang-developer-roadmap (постоянно обновляется сообществом) Почитал, нашёл это: Web Frameworks + Routers Beego Chi Echo Fiber Gin Revel
Что из этого по-настоящему актуально? Какие фреймворки/роутеры обязательно нужно изучить? Хочу перекатиться в го из другого бекенд стека
ларавело подобная срань - го для такого не годится
>Gin >Fiber
профита от них мало джин это тупо роутер над дефолтным хттп сервером а фибер построен на fasthttp, который для лютого хайлоада там ебалово с тем что буфера переиспользуются и тд и если какой-то database/sql подрубить то профит от быстроты фаста аннулируется потому что оно будет узким местом
>>3278870 я в конторе где работаю (fortune 100) использовал фаст для случаев когда надо что-то быстро от клиента получить - отправить на обработку и отправить назад небольшой ответ типа 200 ОК обработка в моем случае - отправка в буфер для сохранения в кликхаус
>>3278740 короче гайд для твоих говноприложух - пишешь openapi 3 спеку для апишки - берешь https://github.com/ogen-go/ogen и генеришь роутер с дефинишенами структур и функций если оффнуть strict server то получишь доступ к http.ResponseWriter, http.Request, если включить то будут удобные хендлеры без ручной (де)сериализации джейсонов
>>3262042 (OP) Подскажите пожадуйста, как сделать так что бы при обращении например к http//example.com запрос попадал сначала на localhost:8000 и потом уже оттуда перенаправлялся на http//example.com. Именно так а не чтобы запрос шел на localhost:8000
>>3279967 >про внутренности го (scheduler, etc) почитай для начала - это как jvm натянуть на вебассембли - такого нет и не будет Некомпетентный >Rust or C++ Говноед
>>3280198 >говно электрон Во-первых, сам электрон в последние годы не настолько плох, как про него говорят. Во-вторых, есть tauri, neutralino и другие инструменты. >скам для дебилов Нет, скорее ты дебил, который называет скамом те вещи, которые не понимает. >питон для обучения и тритон для прода Да, питон для ml однозначно лучший выбор. >круды да Нет, не только круды. В принципе можно сделать всё то же самое, что можно сделать на го, кроме CPU bound задач, хотя и их при желании можно, но их обычно оффлоадят в отдельный микросервис на низкоуровневом языке через кафку/реббит/натс/etc.
>>3280204 >Потихоньку выкидывают джаваговно и джаваскуфидонов спрингописателей Шизик выдохни. У ДБ ОДНА вакансия для Говноланг разработчика. Даже Кобол востребованей, там около десятка вакансий.
>>3280696 База чего блять? Го - это обычный язык общего назначения. Это не специализированный язык типа ampl для комбинаторики и оптимизации. Это не матлаб, это не симулинк и даже не systemc. На нём не проектируют электронику. Какую блять можно знать базу, если он универсальный язык по определению? Ты суперкомпьютеры чтоли собрался программировать или чё блять? Пиздец тупые вопросы.
>>3280696 Я бы даже рекомендовал для новичков. 1) Он прост, после других языков не хватает множества синтаксического сахара, от чего неудобно, а тебе будет норм. 2) Нет ООП деградирования, ты пишешь как думаешь, не создавая слоенного ООП пирога, размазывая бизнес логику. 3) Легко читается и сопровождается, можешь легко чужие сорцы читать. Что порой нужнее чем писать код самому. Я как-то два года спустя открыл свой котлин код и вообще нехера не понял эту магию.
В общем, бери не парся. В каком-нибудь шарпе ты полгода только базу учить будешь, а тут ты и либы подергаешь и напишешь что-то.
>>3280696 Нет. На го вакансии в основном в бигтех, там ты с голым знанием го нахуй не усрался Поэтому каждый гошник - перекатыш из пхп/джавы/питона/етс
>>3280704 я не могу ответить для чего база - так говорят различные блогеры и тд.. Один сослался на то, что обучение на Go всегда подразумивает то, что ты уже знаешь эту самую "базу" и основы для прохождения курсов, обучения и тд >>3280706 Большое спасибо за совет! >>3280919 Работаю рекрутером в it) Везде требуют опыт. Когда джунов ищу с опытом от года - больше половины с накруткой и сразу понятно что нигде не работали. Все понимают прекрасно всё, но если чел талковый, то проблем нет, как правило. У меня больше вопрос про сложность и возможность обучения Go с нулся >>3281002 )))
>>3281235 >я не могу ответить для чего база - так говорят различные блогеры и тд. Это из разряда "посоветуйте то, сам я не знаю что, чтобы я тоже знал".
>Один сослался на ... Одна бабка сказала. В интернете столько людей, я охуею комментировать что каждый спизданул где-то в интернете. Давай так... тот кто сказал имеет какие-то регалии? Он важная шишка в гугле, майкрософте, амазоне? Он обладает глубокой экспертизой? Нет? Ну и всё, шли его нахуй. Любой школьник может зайти в интернет и спиздануть любую хуйню. Не значит что это хороший совет.
>>3281235 >знаешь эту самую "базу" и основы для прохождения курсов Вообще, "основы" - это такая эфемерная хуйня, примерно как точка джи у бабы. Если ты спросишь 10 разных программистов, то получишь 10 разных, конфликтующих ответов. Она строится только на вкусовщине и ничем ином. Спросишь Петяна, он тебе с пеной у рта будет доказывать, что нужна математика в первую очередь, а спросишь Васяна, он тебе начнёт доказывать что нужно знать базы данных. Тут и так почти каждый день идёт срач какой фреймворк/библиотека лучше. Просто надо учить тему, а не ебать голову "основами", "базами" и так далее. Читаешь книги, желательно несколько штук, вот это и будет твоей базой.
>>3281235 > но если чел талковый, то проблем нет, как правило А в чем толковость проявляется? Просто понимает, о чем говорит? А то я уже месяца полтора откликаюсь и все мимо. Щас вообще без опыта в разы меньше стало вакансий. Прям руки чешутся годик накрутить, да вот хз что писать даже(
Можете пж подсказать какой-нибудь материал, где микросервисное приложение с нуля пишут. Можно даже не на гошке. Вообще ничего найти не могу, практического. Одна вода да теория
>>3281498 А норм курс вообще? А то отус слышал не лучшими челами считаются. Да и фраза "демо-занятие" смущает. Но за наводку спасибо, потыкаю немного видосы
>>3282120 + заметил как инфоцыгане переключились на рекламу го. Реклама как с питоном, пиар под видом простого языка чтобы вкатун мог написать бота за три дня. Ну вот теперь как в питухоне, 1200 стажеров толкаются локтями за недавнюю стажку в авито.
>>3282120 то есть чел-рекрутер, который ищет разных разрабов и находится по сути в этом же ИТ - поехавший?) чел со стройки норм, а чел, который намного ближе не устраивает?)) ты еблан, ой
Вот мне как PHPшнику (разбираюсь в ООП, ДДД, симфони ужаса не вызывает и тд), для чего GO? Для каких кейсов? Чем он лучше обычного микросервиса на php, например сходить в бд, достать данные вернуть, или запустить через консольку ffmpeg, обработать что-то и тд.
Что на GO делают вообще?
И далее вопрос, что нужно знать в GO и как долго вкатываться?
>>3283400 1. Написать скрипт и не ебаться с окружением для деплоя. 2. Ультра быстрый шлюз в кластере. 3. Байтоёбство с параллельным выполнением. На большинстве проектов голенг вставляют только для разгибания узких мест. Писать на нём сложную бизнес логику можно только в случае, если ты готовишься съебаться к другому кабану.
>>3283400 >Чем он лучше обычного микросервиса на php Ты докером хоть раз в жизни пользовался? А кубернетисом? А прометеусом пользовался? Ты можешь нечто подобное написать на пхп? Чтобы был докер на пхп? Нет? Ну и всё нахуй, сиди и не пизди.
>>3283408 >Писать на нём сложную бизнес логику можно только в случае, если ты готовишься съебаться к другому кабану. Как раз Го в этом вопросе даже лучше. Код очень прямолинейный и нет никакой магии.
В отличии от джавы, где вешаешь аннотацию - и у тебя магически начинает выполнятся куча стороннего кода.
>>3283478 >В отличии от джавы, где вешаешь аннотацию - и у тебя магически начинает выполнятся куча стороннего кода. Да на пхп давно уже такая же хуйня. Современный коммерческий пхп это недоспрингбут
>>3283448 Школьник, съеби нахуй, заданы конкретные вопросы, а читать мне твои вскукареки мне неинтересно, мне нахуй не нужно писать кубернетис и докер, меня больше волнует мотоцикл и фургон для него
>>3283506 Ты серьёзно даунские вопросы задаёшь - чем компилируемый язык лучше не-компилируемого? По-моему, всё очевидно. Чем машина лучше велосипеда? Ну наверно скоростью, не?
>>3283506 Везде где надо скушать жсончик и недолго думая пукнуть в кафку можно воткнуть гошку Везде где надо быстро обработать дохуя данных с не самой пизданутой наглухо бизнес-логикой (как в основном копролите), можно воткнуть гошку
>>3283513 Школьник, ну-ка скрин где я это задаю, или твоя спидозная мама подохнет, если скрин не принсешь с: > вопросы задаёшь - чем компилируемый язык лучше не-компилируемого?
Твой школьный мозг не способен даже текст прочитать, малолетнее животное
>>3283400 Простой синтакисис, разберешься даже в говнокоде. Скорость разработки. Хорошие тулзы из под каробки(тесты, бенчи, форматирование), много либ на любой вкус. Хорошая паралельность из пад коробки. Есть уже готовые мини http фреймы(аля роутеры). Компилируемый язык, не надо ничего лишнего поднимать(nginx, php-fpm). Мало ресурсов поедает относитльно пыхи, особенно заметно когда у тебя куча динамо стендов в кубе, под каждую фича ветку или баг фикса.
>>3283620 >время ответа 0.002 обычно Ну ок. Запилишь тогда аналог твича? Чтобы видео перекодировалось и раздавалось 5000 зрителям одновременно? Сможешь? Я писал... Лул да кто ты такой, ты чорт епт.
>Запилишь тогда аналог твича? Чтобы видео перекодировалось и раздавалось 5000 зрителям одновременно? Школьник, ты наверное на го и приложения для айос и под андроид делаешь, да? Обезумевшая малолетка решила поиграть какой язык лучше - мне похуй, меня волнует авто и мото, малолетний, который еще не скоро вырастет. Ты даже не осознаешь что всем похуй на твой линукс, виндовс, пхп, го, яву. Малолетняя личинка человека
>Я писал.. А кто тебя спрашивал что ты писал? Создай свой тред и рассказывай что ты писал. Нахуя ты мне это пишешь?
>Лул да кто ты такой, ты чорт епт. Ждем скриншот от пидора, который не предоставит
>>3284023 Наоборот количество вакансий с бекендом на тайпскрипте больше с каждым годом, хоть и занимает небольшой процент от общей массы
>>3284022 > ООП и бизнес поддерживаемая бизнес логика Тайпскрипт прекрасно для этого подходит. Это язык с мощной системой типов от гениального автора сишарпа
>>3284031 >количество вакансий на %ЯЗЫКНЕЙМ% больше с каждым годом Этот тейк в каждом первом треде встречается. Весь бигтех уже все переписал на Шарп, Го, Раст, Котлин, Эликсир, раз 20 наверное.
>>3284118 Язык для бекенда не самый популярный, но это факт, что с каждым годом вакансий на том же NestJS больше процентов на 10-20, я регулярно мониторю рынок т.к. это мой основной стек. Бигтех не показатель, тем более там тоже иногда это используют.
>>3284193 Динамикодриснявая мартышка, сдрисни пожалуйста из треда статически типизированного языка.
Го называет динамикодрисней, а от тайпскрипта кайфует.... Так и запишем С каждым годом он популярнее становится потому что удобно мартышку на жсе садить и фронт и бэк делать + желающих пруд пруди, которые демпенгуют зепки и готовы за еду работать
>>3284207 Я не называл го динамикодриснёй, а наоборот назвал этот тред тредом статически типизированного языка, в котором нет места динамикодриснявым макакам, которые говорят, что типы не нужны.
>>3262042 (OP) Обьясните в чем преимущество делать map[string, *MyStruct] вместо map[string, MyStruct]. Пишут что разницы не сильно много, первый вариант чутка быстрее
>>3284375 В первом случае у тебя будет лежать указатель на MyStruct, во втором сама MyStruct. В случае указателя у тебя копируется туда-сюда 8 байт, в случае структуры - будет гоняться структура целиком.
Как работать с моделями во всяких веб-крудах? Часто возникает проблема, что появляется куча структур типа UserRequest, User, UserDB и так далее, которые описывают одну сущность, но имеют разный набор полей из-за специфики используемого слоя (условно в реквесте мало вероятно, что будет содержаться полная информация о юзере, поэтому есть UserRequest). Как быть в таком случае? Создавать кучу вариаций или гонять везде одну структуру и извлекать только нужную инфу?
>>3285449 Так на жс тс на бэке куда не перни нет нужной библиотеки и так же пили свой велосипед, плюс куча легендарных библиотек isNumber Плюс одновременно чекай и жс код и тс На го все из коробки
После тс с таким кайфом на шарп ушел, ты не представляешь А потом с шарпа на го
>>3285675 Так в GO идут одни свичеры. Чего бы и не спросить. Я не думаю что есть люди которые начали путь программирования с go и так и остальись с единственным языком.
>>3285507 Нет, должны быть разные структуры, в идеале кол-во слоев = кол-во структур В моих крудовых поделках 3 слоя, слой сервера, слой сервиса и слой базы данных, соотвественно 3 структуры
"Одно справа, другое слева от знака равно", - представляете что человека завернут не слышавшего об этом теоретическом говне даже ни разу за время написания десятков толстых проектов?
С тем же успехом можно спрашивать определение манипулятора "типа мышь" и заворачивать людей и думать какой хрюша охуенный работник
>>3285691 Т.е. мы постоянно должны перекладывать из одной структуры в другую при переходе на новый слой? А если они одинаковые по составу полей? И что делать, если в разных сценариях требуются отличающиеся структуры? Условно для update-хендлера нужен только id, а для create - доп инфа. Опть плодить структуры?
>>3285867 Что выбрать зависит от ситуации. Несколько разных объектов дают гибкость: можно менять внутреннее представление, базу и апи независимо друг от друга. Меньше шанс что данные случайно утекут клиенту, или наоборот как-то мусор протечёт в базу. С другой стороны нужно конвертировать туда-сюда. Один объект на всё, хорошо подходит для простых случаев и позволяет писать меньше кода. Но скорее всего, по мере роста проекта придётся разделять сущности.
>>3286053 Так сущность и так одна. Условно юзер с полями id, name, age. Также он и в базе лежит. Но например для удаления мне нужен только id. ВОт мне этот айди совать в структуру User с остальными нулевыми полями и работать только с id, или создавать UserDelete только с полем id?
Не совсем вопрос по голангу, но может найдется что подсказать.
В общем, у нас есть небольшая команда челиков, которые пишут всякие инструменты для инфраструктуры. Они сейчас пишут на питоне и у них нет особой дисциплины в плане типов данных, форматирования кода и т.п.
Можете поделиться своим опытом перехода с питона на го? Типа, что можно ожидать. Тут питон не особо объектно-ориентированный, паттернов и т.п. нет.
Но я хочу перейти потому что в го статическая типизация и форматирование из коробки, ну и производительность конечно плюс, хотя в наших требованиях такого нет.
Инструменты планирую переводить как командной строки, так и веб апишки.
>>3286184 >Так сущность и так одна. Условно юзер с полями id, name, age. Также он и в базе лежит. Ещё раз: это вначале у тебя у сущности 3,5 поля, а потом, по мере роста проекта у тебя добавится список телефонов который хранится в отдельной таблице, список ролей и т.п. И тут уже надо разделить АПИ, внутренние представление и базу. Хочешь делай сразу, хочешь рефактори потом.
>Но например для удаления мне нужен только id. ВОт мне этот айди совать в структуру User с остальными нулевыми полями и работать только с id, или создавать UserDelete только с полем id? Ты придумал проблему на ровном месте. Просто передаёшь ID и всё, никакая сущность тебе не нужна.
Если первичный ключ составной или у тебя записи версионируются, создай объект PrimaryKey и юзай его и в сущностях и методе удаления.
>>3285867 >>3285691 Жесть, на этот спам ДТОшками и перекладыванием из пустого в порожнее еще в джаваспринге жаловались, и опять к нему пришли
>>3286204 Смотря какой объем кода. Большой объем и нет жестких требований по перформансу - лучше оставить на питоне. Не всем нравится спамить if err != nil, тем более там, где в этом нет необходимости. Это типичная проблема переписывания проектов - каждый новый человек стремится переписать под то что ему нравится и при отсутствии больших ресурсов это зависает в полузавершенном состоянии. Взвесь сначала.
>>3286204 Спорная затея. Голанг - это про веб микропенисы в очень узких местах. Твои очевидные проёбы. При переписывании будут баги. На питон кратно легче найти замену веслателя. Никаких профитов от статической типизации и производительности. Можно внедрить автоформат питоновских файлов при сохранении.
>>3286605 >Жесть, на этот спам ДТОшками и перекладыванием из пустого в порожнее ДТО на реквест, ДТО на респонс, фабрика для ДТО, маппер для ДТО... кто работал на проекте, где любят дто, тот в цирке не смеётся
>>3286605 Можешь, пж, пояснить за ДТО? Это то что я описывал, что для каждого слоя своя структура? Как от такого избавляться, а то не в восторге сам от такого?
>>3286605 >Жесть, на этот спам ДТОшками и перекладыванием из пустого в порожнее еще в джаваспринге жаловались, и опять к нему пришли
Иначе это превращается в 300 тыщ параметров в каждой функции ну или при изменении той самое единственной структуры, которую ты везде гоняешь, велик шанс что что нибудь где нибудь да наебнется
Кстати где то видел проект где навалили сотню структур и мапили их через одну единственную функцию через reflect (как по мне жутко нестабильная хуйня)
>>3287928 Да, DTO - это термин из объектно-ориентированных языков, аналог структур. >Как от такого избавляться Не использовать там, где в этом нет смысла
>ну или при изменении той самое единственной структуры, которую ты везде гоняешь, велик шанс что что нибудь где нибудь да наебнется Выглядит как какой-то религиозный подход, потому что умные люди так сказали. Ничего не наебнется, особенно если структура используется в одном потоке, это просто не так архитектурно красиво будет выглядеть. Иммутабельность в основном используют как защиту от гонок модификации данных, если нет многопоточного доступа - нет и гонок.
Просто ДУМАЙТЕ сами, что решает тот или иной подход, а не просто делайте потому что кто-то что-то сказал
>>3287928 DTO - это data transfer object, обычная структура с полями без логики. Используется вместе с ORM, чтобы не писать руками user.Id = reader["UserId"].GetInt32() снова и снова. SQL запрос возвращает какой-то набор сырых данных, с сырыми данными работать неудобно, поэтому они мапятся на массив DTO структур и дальше ты работаешь со структурами.
>>3287808 Эта контора полностью сломала рынок для джавистов-мидлов в свое время, они еще до хайпа стаи назарова существовали. Смысл в том что тебя надрачивают на прохождение собеседования (теории) и дают второго пилота для прохождения собесов. Работу тебе будут искать в Москве так как там самые высокие вилки. Отдать конторе нужно вроде 20% от месячной зп пару лет. Не рекомендую, из-за таких пидорасов собеседования превратились в решения головоломок и допросы + неофициально устроиться на работу (если не хочешь платить алики) стало трудно так как теперь каждый второй с 3 годами опыта в вымышленной компании.
Го лучший язык для бэкенда любой сложности. От 0.001 рпс пета до 100000000 рпс монстра. Скорость разработки на го намного быстрее любого другого языка. Простота и отсутствие красивостей и свистоперделок позволяет понимать код тиммейтов с невероятной легкостью. На этом языке очень тяжело словить тильт. Стандартизированный тулинг позволяет новому гребцу вкатываться в процесс разработки в первую неделю работы. Теперь про минусы: стандартная либа не на генериках - хочется брать корень от целочисленного типа, новые фичи в новых версиях добавляют ненужной сложности языку.
>>3289694 Тот чел сумасшедший. На гоу сраный круд будешь 2 недели пилить. Там дохуя всего может конфиктовать и для этого приходится везде метрики прикручивать.
>>3289691 >Скорость разработки на го намного быстрее любого другого языка Ну зачем сразу так толсто? На пыхе быстрее, на жс/тс быстрее, на руби быстрее, на питоне быстрее.
>>3289691 Ты пытаешься себя убедить или что? Го это ходячий бойлерплейт, все что дальше микро-круда писать можно, но чрезвычайно уныло и муторно, а гребанное процедурное программирование возвращает нас во все те же проблемы 30-летней давности, которые были решены в промышленном ООП-программирование кровью и потом. У меня правда флешбэки от функций в 1000 строчек и 10 аргументами, с двухбуквенными переменными
>>3289819 >Там додик умудрялся сравнивать зиг в дебаг сборке и специальные сокетные http-огрызки от го с полноценными http-серверами. Он бы еще код на го сразу с машинным сравнивал.
>>3262042 (OP) суп двощ, есть ли способы спиратить IDE от JetBrains? СТудентскую лицензию давать перестали (хотя гитхаб дал, лол), а привыкнуть уже успел. Ну или где то купить слитую лицензию по дешёвке
сап, потихоньку вкатываюсь в го с других бэкенд языков (жаба, тс). Поясните пж за систему пакетов и модулей. Что нужно выделять в пакет? В модуль? Какие хорошие практики? Как делать надо, как не надо?
Тоже хочу попробовать Го. До этого писал на Си в основном под МК. Хочу написать простой веб TODO. Бот мне выдал, что надо написать бэкенд на Го, потом фронтенд на Express. Много лет назад писал монолит на Flask и немного удивительно, что надо делить фронт и бэк. В связи с этим вопрос: го-сеньоры, меня бот не обманывает?
>>3294075 не обманывает, гошка во фронт не очень. Есть варик генерить всё на беке - htmx + templ. Есть что0то типа веба в wasm - wail go-app Можно упороться и сгенреть всё в wasm там внутри генерить html и прочее. Но один фиг тебе придётся писать много обвязки для работы с беком.
Лиспы - семейство языков программирования. Характерные особенности лиспов: динамичность, гомоиконность код как данные, программируемость.{Основные диалекты}:: Common Lisp - разрабатывался как промышленный язык, пригодный для широкого спектра применения, из-за чего имеет достаточно объемную специфика
Лично мне не хватает в го возможности управлять памятью как в си. Например, нельзя создать динамический массив, не использую встроенные срезы. Также не хватает выразительности новых конструкций. Это по прежнему отдельные функции и структуры как в си. Нельзя их интегрировать в синтаксис с помощью перегрузки операторов.
>>3294606 Зато в обмен получаешь простой и читаемый код. Тиммейты на говнокодерах не смогут испортить настроение. Также производительность ниже всего лишь на процентов 5 по сравнению с оптимизированными плюсами. Говнокод и мозгоебля того стоит? Не стоит.
Сап, гоферы. Хочу начать использовать пикрил библиотеку для своих петпроектов игровых. Кто-нибудь пробовал? На го только скрипты и маленькие микросервисы по работе и унику писал.
>>3268767 Работал в двух крупных проектах ЕС/США, дела обстоят так: есть набор внутренних и около-обязательных тулзов-оберток поверх стандартной либы или популярных мейнстрим-либ, например хттп сервер, в который уже всунуты дефолтные для конторы метрики и логгирование, или либа для БД, брокера сообщений и т.п. Делается это для единого контроля за структурой проекта и версиями, а то где-то уже обновили или взяли условный логгер v3, а где-то еще v1. Часто еще есть шаблонный проект со скриптом, который по одной команде создает тебе сервис из шаблона с нужным тебе названием или даже либами.
Бойлерплейт кода по сравнению с джавой действительно получается больше, как и больше усилий на поддержку этих ваших тулзов-оберток (в джаве они околонулевые, есть же поддерживаемый всем миром спринг). Но при этом это не то чтобы __тяжело__ делать, обычно достаточно просто сделать нормально и продумано один раз, а дальше просто версии обновлять и добавлять фичи по мере необходимости.
А вот если всего этого нет, то каждый берет то, что считает нужным, и начинается ебучий ад, особенно когда какой-то особо одаренный всунет говно вроде go-micro.
>>3294885 >Бойлерплейт кода по сравнению с джавой действительно получается больше, как и больше усилий на поддержку этих ваших тулзов-оберток (в джаве они околонулевые, есть же поддерживаемый всем миром спринг). И всё это ради того, чтобы пилить очередной распределённый монолит?
>>3294730 >Зато в обмен получаешь простой и читаемый код Этот буллшит еще работал лет 7 назад, но сейчас то с какого места дует этот бред?
Схерали бойреплейт код стал легко читаем? Ты ассемблер легко читаешь? Максимально просто же. Развесистая портянка кода, этот го, что писать муторно, что читать.
>>3294885 В жабе сейчас зеленые потоки, в шарпах асинки. У обоих все из коробки, шарпы не скучные, котлин молодежный. Как вообще определяли выгоду, когда го выбирали? Я джаву считал топорной, а это вообще пцц?
>>3294923 >распределённый монолит Открою тебе страшную тайну: других архитектур не существует. Более того, опытные команды возвращаются обратно к монолитам с шардингом, когда окончательно заебываются изучать 100500 логов в секунду. Микропенисы красиво работают только в проплаченных статьях, на проде это сначала ад, потом пиздец.
>>3295027 Service oriented architecture, или вообще modular monolith. Модульный монолит это лучшее, с чем мне доводилось работать. Даже жяваскриптеры уже давно к этому пришли, у них это в nest.js из коробки.
>>3295032 Так это и есть классический монолит. Еще диды так писали. Охуительные истории про один гигафайл, в который собирается вся система - это выдумки маркетологов. В реальных системах каждая команда работает над своим модулем, модули могут лежать рядом в одной папке и ходить в одну бд, а могут быть на разных серверах, но это не точно.
ОСТОРОЖНО! Сценка "Джава-господин и убоGOе ничтожество" J — На вас очередной раз помочилась жабка, "пись-пись-пись")) Помочился на лицо — Будешь ещё свою хуйню писать GOвноед?! G — Не-ет, не буду, клянусь. О, великий джавист, отпусти убогого. J Начал снова мочиться на лицо — Что-что?) Я тебя не слышу-у) Закончил мочиться — Уходи! И скажи своим, чтобы со своим говнолангом не смели даже подходить к Электронной вычислительной машине! Устройство, подвергшееся твоему убожеству будет уничтожено! G — Дя-а, господин, я все передам GOвноед удалился, а джавист остался властвовать на троне
>>3295213 Заходит доктор (Д) с фамилией СэйШарф и говорит: Д - Ну как наш больной поживает? Сегодня будем хорошо себя вести? О, я думаю пора снять смирительную рубашку J - ...вэФе ...мучану ...кэмэ Д - Какие мы сегодня болтливые медленно поворачивает за плече пациента Д - Людмила, наш умелец снова начудил тут лужу, замените пожалуйста белье доктор что-то записал в своем планшете и медленно вышел из палаты
>>3295219 Ничего не мешает, кроме того что на сотом импорте можно словить циклический импорт и придется половину переписать. Или где-то кто-то обновит интерфейс и будет увлекательно искать неделю те структуры которые его реализуют. А функция которая вызывается 100К раз в 1000 разных мест, неожиданно запишет в лог что ей поплохело. Но ты никогда не узнаешь где именно это произошло, потому что стектрейс для грустных.
>>3295228 — Майор Пайт(П), у нас серьезная задача, освободить господина J. Мне недавно поступила информация, что он находится в больнице некого "СейШарпа". Он сковывал его движения и читал.... Извините, мне тяжело об этом говорить. Он читал ему документацию голанга. Они сводят его с ума, Пайт! П — Что..... Пайт понимал, что господину J пришлось несладко, и щекочащий прямую кишку паяльник будет далеко не худшим исходом. Но проверить в такое было невероятно тяжело — Он заплатит, он за все заплатит...
>>3295235 А еще, кто-то обязательно под усталость забудет вызвать что-то типа rows.Err(), ну или просто забудет записать единственную возвращаемую ошибку. В общем, увлекательные приключения плавающих ошибок в веселом монолите от го.
>>3295021 Какой профит от котлина на беке, когда у джавы каждые полгода-год новые релизы и половина фич котлина есть? Он разве успел набрать какую-то критическую массу вне мобайла?
Про шарпы ничего не знаю, но вроде бы __слышал__, что там с работой на линуксе проблемы. Какое актуальное состояние, без понятия вообще, но в целом стереотип такой, что шарпы для виндузятников. Ну и вроде под оборудование на заводах тоже пишут на шарпах из-за того, что миллиард софта-драйверов на винде.
>Как вообще определяли выгоду, когда го выбирали? Легко вкатиться с любого ЯП. Легко писать, читать и использовать все фичи языка -- всё максимально просто и понятно. Работает быстро, собирается быстро, нет заумных систем сборки вроде градла. Есть стандартная либа -- можно не зависеть от очередного RoR/Spring. Хотя в той же джаве спринг уже наверное де-факто часть stdlib.
Но вообще выгода при выборе ЯП для нового проекта определяется тем, на чем конкретно тебе быстрее стартануть (т.е. тем, какие инструменты и яп ты лично знаешь). В целом вон фейсбук частично на пхп работает, шопифай вроде на руби, и ничего, все живы.
>>3295327 Собсна, в вакансиях часто пишут что-то вроде "Требуем опыта Х лет бекенд-разработки, знание Го желательно, но не обязательно". И ты реально наймешь чела с любым бекенд-бекграундом и он быстро вкатится. В условной джаве ты так не сделаешь.
>>3295235 > можно словить циклический импорт Это да, проектировали ебланы > кто-то обновит интерфейс и будет увлекательно искать неделю те структуры которые его реализуют Идешка покажет, кто реализует интерфейс > функция которая вызывается 100К раз в 1000 разных мест, неожиданно запишет в лог что ей поплохело Контект для этого и прокидывают, чтобы понимать, где, что, с какими параметрами сломалось
>>3295393 >Идешка покажет, кто реализует интерфейс То есть, го теперь тоже тыква без IDE как и жаба? Добро пожаловать в клуб. >Это да, проектировали ебланы Конечно, пока сам не словишь ц.импорт (и ловил же) >Контект для этого и прокидывают Говнофиксы с бойлерплейтом, которые в нормальном яп не нужны и усложняют б-логику
>>3295327 >но вроде бы __слышал__ У тебя весь твой текст из шаблонных фраз с ютуба. С шарпами все ок, на линуксах в облаках много бизнеса крутиться, мягкие сами потеют ради линукса, ибо вкусный пирог.
>Какой профит от котлина на беке Та же джава, но меньше бойлерплейта.
>Легко писать Лож, бойлерплейт не легко писать, крайне утомительно >Легко писать Лож, бойлерплейт трудно и пишется и трудно читать
>нет заумных систем сборки вроде градла. Ну да, то то макфайлы это модно и молодежно, лол
>можно не зависеть от очередного Еще один писатель софта из одной стандартной либы.
>Легко вкатиться с любого ЯП 100 неочевидных ошибок, тому доказательство. Начинай свой новый день с подводных камней кривого дизайна го.
Наслушаются инфоцыган и бегают то с питоном то с говном, мантра про то что на го легко развернуть проект, где каждый велосипедит свое, в то время как жабошарпы из коропки все давно сделано - просто смешно, то есть они самый главный недостаток переобули в фичу, лол
>>3295525 Официально только скрипт, плюсы и шарпы, а го котлины, расты, жс и прочие поддерживается над расширением, что практически обычно звучит как тухляк полуживого попенсорса.
>>3295847 >то есть они самый главный недостаток переобули в фичу, лол так это есть суть Го, все недостатки из других языков переобувать в гениальные фичи
>>3295867 >так это есть суть Го, все недостатки из других языков переобувать в гениальные фичи Жирнота то какая сначала я думал ты троллишь, но оказалось ты просто малолетних дегрод
>>3295943 О да, это ведь ключевая характеристика каждого ЯП, 14 килобайтный хв это вообще киллер фича си, все разрабы в срочном порядке делают сепуку во славу Денниса Ритчи и Страуструпа
>>3295898 А помнишь как невыразительность из джейвы магическим образом превратилась в супер-крутую фичу в еще более невыразительном go? less is more, just write more code? легко учить, легко передавать? Мэйкфайлы из ада C++ стали супер молодежными Калечная область видимость переменных через ИМЯ а не модификаторы, как в каком-нибудь питоне или джс - уоу, как круто, как удобно!
>>3296132 Ну если ты готов покупать террабайтные диски для программ, которые могут занимать в сотни раз меньше места, то покупай. Я за качественное ПО, которое компактное и быстро работает. Я вообще считаю, что раздувание современных программ - это рак, который надо выкорчевывать, а не потокать ему.
>>3296328 Когда станешь кабаном, тогда и будешь сишников красноглазых нанимать, чтобы они в твоем пиздатом ПО каждый байт экономили Правда, к моменту выпуска MVP тебя ждет несколько сюрпризов, но об этом потом узнешь
>>3295943 Что-то подобное я слышал в растотреде. Там еще добавляют про фанбоев и маркетологов. Опционально сравнивают с си и си за решеткой, принося говнокод из этих языков
>>3295053 >>3295032 Монолиты сложно часто релизить, если команда разработчиков большая и нет QA. Будете буквально каждую неделю блокироваться о то, что в соседнем отделе вмержили баг, он попал на тестинг, там его чудом заметили и теперь надо ждать пока этот баг поправят, после чего релиз начнут заново пересобирать и пытаться выкатить на тестинг, где будут ждать аппрувов от всех разрабов всех команд.
Распределенный монолит рано или поздно превращается в обычный монолит, где будет куча зависимостей между модулями. Сам такое видел пару раз.
Самый топ - это микросервисы. Не потому что это модно, а потому что можно релизы хоть каждые 5 минут катать, если не ломаются контракты между сервисами. И это гораздо удобнее, чем ждать пока 60 человек скажут что они проверили свои задачи на тестинге.
>>3296400 Там еще можно std отключить и наколхозить с асемблерными вставками и будет как в си, но это чисто развлечения для специальной олимпиады. В продакшен ты один хуй потащишь библиотеки и этот мегабайт стнадартной библиотеки будет незаметным на фоне всего остального
>>3295235 >Ничего не мешает, кроме того что на сотом импорте можно словить циклический импорт и придется половину переписать. Это да, удивило очень сильно. Года два назад как-то пробовал в качестве эксперимента написать апи для крудошлепста БД где-то на 30 таблиц, как раз копия дева была локально. Нагенерировал структур из sql и разложил все по полочкам, модели, интерфейсы репозиториев, реализации репозиториев хуё-мое, уже не помню вроде декораторы репозиториев с инмори кешированием написал. Компилирую и получаю большой хуй из-за импортов, в итоге закончилось тем что я собрал все в одну большую папку и тогда заработало. С тех пор у меня отбило все желание перекатится на го, хотя количетво вакансий выглядело перспективным.
>>3295235 >Или где-то кто-то обновит интерфейс и будет увлекательно искать неделю те структуры которые его реализуют. >>3295393 >Идешка покажет, кто реализует интерфейс А кстати как решается этот вопрос при командной разработке? Неужели так вручную приходится искать все реализации при помощи ide и потом править внимательно глядя на то не проебал ли ты какую-то структуру. Или есть какие-то линтеры, комментарии в структурах и тп?
>>3296442 >А кстати как решается этот вопрос при командной разработке? Неужели так вручную приходится искать все реализации при помощи ide и потом править внимательно глядя на то не проебал ли ты какую-то структуру
Го компилируемый язык, поэтому при компиляции у тебя все структуры, для которых ты забыл заимплементить интерфейс, покажутся в выводе ошибки компилятора. Линтеры или комментарии для такого не используют.
>>3296469 То есть получается что в коде так или иначе ты передаешь структуру в метод где тип аргумента интерфейс и именно там оно и наебнется на этапе компиляции?
>>3296469 >Го компилируемый язык, поэтому при компиляции у тебя все структуры, для которых ты забыл заимплементить интерфейс, покажутся в выводе ошибки компилятора. Далеко не всегда, может и в рантайме запаниковать.
совету не учить язык golang, т.к. язык молодой, а также имеет слабое ООП, также кривую обработку ошибок(ты же не хочешь каждую строчку писать if err != nil, в шарпе или жаве намного удобнее :) ), НАХУЙ не нужные интерфейсы, а также очень мало вакансий для начинающих, потому что голенг разработчики НАХУЙ никому не нужны, т.к. все норм разрабы перешли в него с жавы или шарпа уже на позицию мидла. Работу ты НЕ НАЙДЕШЬ, у тебя НЕТ ШАНСОВ :( . Задумайся, а сейчас я бы посоветовал начать с изучения топового языка такого как python, у которого есть очень крутые фреймворки для того, чтобы начать работу уже ЧЕРЕЗ МЕСЯЦ обучения(я так и сделал :3 ). Также для начала программирования бекенд приложений тебе стоит изучить алгоритмы и стукрутры данных(я разбираюсь). Тебе нужно прорешать не менее 100 легких задач на литкоде, 50 средних и 25 сложных, иначе тебя НИКУДА не возьмут. Так что иди учи салага, ждем тебя в рядах наших Айтишников, чтобы ты мог чинить микроволоновки и писать приложухи :)
>>3295847 >У тебя весь твой текст из шаблонных фраз с ютуба. Да. Я же написал, что описываю стереотипное мнение, а сам деталей не ебу.
>Та же джава, но меньше бойлерплейта. Куда ещё меньше? Что в котлине для бека есть такого, чего нет в последних джавах?
>Лож, бойлерплейт не легко писать, крайне утомительно Спринг учить тоже нелегко и утомительно.
>Еще один писатель софта из одной стандартной либы. Ещё один "а давайте импортнем VasyanLib.jar", похуй чо там потом будет.
>100 неочевидных ошибок, тому доказательство. Начинай свой новый день с подводных камней кривого дизайна го. Про любой ЯП можно так сказать, и в любом ЯП ты сможешь найти кучу неочевидных мест, чтобы обосраться.
>Ну да, то то макфайлы это модно и молодежно, лол Makefile скорее для свистоперделок вроде линтеров, генерации протобафа и деплоя используют. Для сборки достаточно одной команды, всё остальное, включая подтягивание зависимостей, само отработает. Никаких мейкфайлов.
>то есть они самый главный недостаток переобули в фичу, лол Ну да, сделали ЯП для любителей такого подхода. А зачем нужен ещё один ЯП с местным спрингом, когда уже есть джава со спрингом?
>>3296328 Рыночек в очередной раз порешал, стоимость времени, которое смузихлеб потратит на оптимизацию RAM/Storage будет в разы дороже, чем покупка и установка этого самого железа. Зачем, если можно делать бизнес-таски по перегонке новых жсонов?
>>3296766 >Открыл вебинар от озона, первое с чем знакомят это мэйк файлы. Пришел в ПНД, первое, чем кормят -- говно двусмысленно вышло
>>3297652 >недельку учишь спринг Потом ты вспоминаешь Евгения Борисов с его "потрошителями" и понимаешь, что даже на корку у тебя уйдет не один год, лол
>>3297811 >Ты ничего сложнее крудов не писал на спринге. Бинпостпроцессор полезная фича для серьезных проектов Именно что писал и наелся этого говна выше крыши. Добавляешь новый бин, и у тебя отвалится вайринг в месте которое ты вообще не трогал. Спринг вместо простого и легковестного DI, которым он был изначально, стал современной WebSphere.
Я считаю что конфигурация спринга должна быть простой и понятной, а если тебе нужен BeanPostProcessor значит ты делаешь что-то не так.
>>3297496 >Рыночек в очередной раз порешал, стоимость времени, которое смузихлеб потратит на оптимизацию RAM/Storage будет в разы дороже, чем покупка и установка этого самого железа. Зачем, если можно делать бизнес-таски по перегонке новых жсонов? Двачую, в большинстве проектов похуй на перформанс языка, вообще можно спокойно делать бек на питоне/ноуджс/руби/пыхе, ресурсы железа нынче очень дёшево стоят.
>>3297496 >Рыночек в очередной раз порешал, стоимость времени, которое смузихлеб потратит на оптимизацию 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 Какого хуя там другой тип стал во второй функции?
>>3298330 К слову о том что не достаточно взять "быстрый" язык. Писать оптимизированный код это отдельная инвестиция времени и, что важно, ума. Бенчи techempower тому доказательство. То есть, человек, который думает, что возьмет го/раст/zig/ассемблер и выиграет с этого, чаще этот человек некомпетентен в вопросе оптимизации и пишет обычный, неоптимизированный код.
>>3298401 Всё, что не го. В руби рельсы, в пхп симфони и ларавель, в питоне джанго и фастапи, в джаве спринг, в ноде нест и фастифай, а в го голый роутер да и всё, лол, остаётся писать велосипеды, очень весело и продуктивно.
>>3298461 > В руби рельсы Это увлекательный мир, ты очень быстро пишешь круды, генерируя из терминала, потом очень долго и больно решаешь всяки N+1 проблемы, а еще там много магии и писать можно всякую хуйню, которую хуй прочитаешь. На рельсах удобно пилить проекты которые отдал заказчику и забыл, но очень больно это говно поддерживать
>>3298461 В бигтехах, где я работал, и Go использовался как основной язык, было одно общее условие - написана общая PaaS/фреймворк/библиотека на которых пишутся все сервисы в компании. Она была отлично задокументировна + были внутренние каналы на 5-10к инженеров где тебе за 15 минут помогут с каким-то вопросом по этой вундервафле.
Так что если это условие соблюдается - на Go писать продакшен отлично. Если никакой инфры для Go в компании нет - лезть туда не стоит, и проще писать сервисы на том же Node.js + Typescript + Fastify/Nest или спрингоговне, иначе ты заебешься настраивать проект, затаскивать гошные либы, линтеры, кодгены, мидлвари, и делать очередной extra-super-modern-toolkit-template для го разработки в компании. Можно конечно взять и написать свой PaaS для конторы только это пиздец как дорого, и тебя с вероятностью 99% пошлют нахуй, тк под это выделяется целый стрим и отдельные команды/бизнес юнит.
Так что если там где ты работаешь, под го нихуя нет то бизнес пиши на любом ЯП где все есть заранее а на гошке решай чисто инфровые/devsecops задачи.
Дали оффер в финбигтех на миддла/сеньора (хз, че там, сегодня оффер презентуют на +-350к) с перекатом из питхона в гошку. Там у них есть какое-то обучение, но хотел у бывалых спросить, есть ли что-то, что для такого переката было б классно почитать или изучить? Или можно просто доку прочитать и идти пилить микросервисы?
>>3298330 Так и надо. Вы делали сначала чтоб приносило деньги и объемы, которые вам сделали большой инстанс, а потом оптимизировали все, чтобы инфра была недорого.
>>3299891 Он ещё не доделан нормально, так что хз. Но там суть в том, что код на го компилится в объектник, который нормально линкуется с объектниками на С/С++, можно дёргать функции оттуда без CGo (и наоборот), и даже можно будет пользоваться указателями на аллоцированную в си память, а вот это пока не доделали. Так что хз как сейчас, но вообще кто-то пользоваться точно будет.
Аноны, подскажите пж, насколько го шустрый? Прост в вузе на алгосах мы писали на крестах и питоне, где вживую было видно что плюсы прям неебаца быстрее петухона, некоторые задачи на с++ проходили просто тупым брутфорсом, когда на питоне приходилось кочевряжится. Из за чего у меня появился шаблон что все что не плюсы медленное говно, но вот я уже почти как полгода стажируюсь на го и не понимаю, он медленный или быстрый, нет возможности запустить какой нить алгоритм и сравнить, мне просто дико влом решать алгозадачи, тем более на го
>>3301851 Точнее я знаю что он быстрее большинства, но тип... насколько? На нем в случае чего можно не усираться в этот невидимый коэффициент перед O(n log n)? В общем да, хотелось бы получить какой то общий ответ
>>3301851 >Аноны, подскажите пж, насколько го шустрый? Средне. Скажем так... он быстрее джавы раза в 1.5. Быстрее ноды раза в 2. Быстрее пхп раза в 2.5. Но! С дотнетом/сишарп не всё так однозначно. С/С++ проигрывает всухую. Rust'у просирает ну где-то процентов на 15-20. Короче быстрый, но не супер быстрый-быстрый.
>>3262474 >го вообще только вообще хрень никому не нужная. В нём нет abi ос- ориентированных вообще, только транспиляция в с-abi компиляторы. На выкид в общем то, ещё одна ненужная хрень вермишельная.
>>3302019 А нахуя оно в языке, ориентированном на веб сервисы? Вы блядь плюсовики свой язык перегрузили килотоннами говна так, что ни один человек на планете не знает С++. Пока познакомишься с вагоном хуерги из нового стандарта, забудешь старые. Не зря Торвальдс любителям добавить в языки новые возможности в лицо ссыт и к ядру не подпускает.
>>3302023 >Не зря Торвальдс любителям добавить в языки новые возможности в лицо ссыт и к ядру не подпускает. Дааааа, ведь так весело писать аналог этих новых функций, но только не в одну строку, а во все 15. Поссал на ебало всем тебе подобным
>>3301851 Там зеленные потоки с диспетчером и гц каждые 10мс в ущерб проца, он априори не может быть быстрым.
В реальных тестах (не искусственная хрень) и реальных приложениях он сосет даже у жабы, причем в асинхронных тестах где должен быть быстрее. Так же можно увидеть что в топе techempower находится го, но все это сокетные огрызки от настоящего http протокола (чаще на базе fasthttp). Реальный перформанс где-то на корутинах котлина. К сожалению зеленые потоки имеют недостаток в сравнение с донтвэй асинк/авэй
Что насчет питона, то медленнее него только руби или кривые приложения на других языках (даже на Си и С++).
И да, не важно быстрый язык или нет, писать оптимизированный код это отдельный скилл. И если ты думаешь что ты умеешь писать "быстрый" код, то это не так.
Но в итоге го достаточно производительный по меркам промышленного программирования. Да и какая тебе разница, ты что ли железо кабану покупаешь?
>>3302049 Любой, кто хочет писать т.н. быстрый код, должен уметь делать профайлинг. Если человека закидать всякой хуйней для профайлинга, у него наверное вся хотелка писать оптимизированный отсохнет. Делать оптимизации просто так признак дурачины.
>>3302049 И да, гошка/шарпы на железке имели около 40-60к запросов, а потом подключил код работающий с базой, и все упало до 1-3к То есть, хоть на питоне пиши, все равно в i/o упрешься.
Стоит отметить у жабы шустрый драйвер к базе, на этом все, срыг, тормозная херотен
А как вы обрабатываете ошибки? В такое количество явных ошибок с этим if-err-not-nil, что хочется правильно настроить разные типы ошибок.
Ну простой пример из моего проекта: есть роут с контроллером GET /data, есть функция которая что-то читает с БД, из файла, занимается marshalling/unmarshalling. И на половину из этих ошибок надо отправлять разные http статусы и сообщения клиенту.
Писать errors.New("db fail happend") не хочется, к тому же проверять в родителе это как? Посоветуйте куда копать.
В java, python и прочем ооп можно было в catch выбрать нужную ошибку и соответствующе отреагировать. Но в го такого механизма нет (либо он выглядит как-то иначе)
>>3303560 Обычно принято заводить свои ошибки под определенные кейсы для каждого слоя приложения. Например, в твоем случае: - в пакете storage(предположим, в нем у тебя слой работы с БД) ты создаешь файлик errors.go и объявляешь в нем релевантные для твоего кейса ошибки(ErrNoRows, ErrEntityDoesNotExists). - в пакете, где работаешь с файлом, логика та же - заводишь кастомные ошибки(ErrInvalidFile, etc...) - для валидации, маршаллинга/анмаршаллинга аналогично
В итоге в коде твоего хендлера используешь errors.Is() или errors.As(), например такой вызов:
Схему максимально упростил, по хорошему можно еще обобщать ошибки на временные/постоянные и дополнительно изменить логику их обработки(так же через пакет errors).
Создаешь новый тип для ошибки и возвращаешь его. Наверху делаешь errors.Is/As() и отправляешь соответствующий HTTP код.
Или можно не создавать свой тип, а просто fmt.Errorf("DB read failed: %w", err) при условии, что условная база имеет свой тип для ошибки. https://go.dev/play/p/c2UIni-E2ep
>>3304299 Как разница, что там оператор ветвление что тут? Офигеть победа match result { Err(nil) => return nil; Ok() => { // еще один отступ для бога ветвления }
Самая лучшая реализация ошибок в системном языке это в зиге
>>3304889 >Как разница, что там оператор ветвление что тут? У тебя в говне ошибка - это строка. >Самая лучшая реализация ошибок в системном языке это в зиге Пили пример.
>>3304921 Так по факту вопросы легкие, спрос на го разрабов ебанутый, я открыл резюме с накрученным опытом до 3+ года и мне хрки сразу срать начали в личку
>>3304924 У меня почти 3 года опыта на го, общего опыта 5 лет. Из них 4 в бигтехе, и че то хрюши нихуя не пишут. Последнюю работу нашёл проспамив 100 вакансий. Чяднт?
>>3303600 >Обычно принято заводить свои ошибки под определенные кейсы для каждого слоя приложения. Например, в твоем случае: >- в пакете storage(предположим, в нем у тебя слой работы с БД) ты создаешь файлик errors.go и объявляешь в нем релевантные для твоего кейса ошибки(ErrNoRows, ErrEntityDoesNotExists). >- в пакете, где работаешь с файлом, логика та же - заводишь кастомные ошибки(ErrInvalidFile, etc...) >- для валидации, маршаллинга/анмаршаллинга аналогично > >В итоге в коде твоего хендлера используешь errors.Is() или errors.As(), например такой вызов
Я сам до этого всего додумался. Тоже пишу свои кастомные типы ошибок на каждом уровне, а потом прокидываю их по цепочке вызовов выше, в handler и там уже либо ифами, либо свитчем делаю обработку и выставляю нужные коды ошибок. А бывает, что еще на уровне сервиса надо выстраивать обработку ошибок, причем довольно громоздкую.
И по факту ведь кал получается, абсолютно нечитаемая write-once параша. После питухона или жабы кажется что это какой-то совсем неправильный подход.
>>3304995 Дело в том, что развитием го занимаются долбоебы. Они не следят за разработками в других языках, они придумали манямирок "мы из гугла мы крутые ебать" и живут в нем. На любую справедливую критику хуле все так через жопу ответ один - это говей, пиши err!=nil и не выебывайся. Похожая хуита происходит в яндексе, только там шизы пишут круды на плюсах и пилят свой никому нахуй не нужный userver.
>>3304995 Лол, как только го попал в настоящую разработку, люди сразу начали придумывать эксепшены. Спасибо дедушкам из гугла за обработку ошибок руками.
>>3305024 >это говей, пиши err!=nil и не выебывайся >>3305124 >Лол, как только го попал в настоящую разработку, люди сразу начали придумывать эксепшены. >Спасибо дедушкам из гугла за обработку ошибок руками. Эксепшены хорошо работают до тех пор пока у тебя линейный код в одном потоке. А как только у тебя появляется асинхронные функции/корутины/легковесные потоки всё резко усложняется и появляются все эти AggregateException, coroutineScope и прочие ExecutionException. Со всякими ахуительными шаблонами типа: } catch (ExecutionException e) { throw e.getCause(); }
>>3301862 >Го быстрее джавы раза в 1.5. Быстрее ноды раза в 2. Быстрее пхп раза в 2.5. Быстрее пхп в дохуища раз, быстрее ноды процентов на 30... Медленнее джавы в 1.5 раз
>>3305664 У тебя фреймвёрки несопоставимы. Ларавель - это комбайн, который умеет всё на свете, а горилла-мукс - это обёртка над стандартным гошным хттп-сервером, там функционала минимум. В джаве надо Spring сравнивать.
Вот по расту есть куча md-книжек и прочих ресурсов https://rust-lang.ru свободных для чтения. А по го почему-то ничего подобного нет. Все книги платные. Почему так?
>>3305507 В сишарпе такие конструкции скрыты внутри фреймворка, их никто не пишет. Вызываешь .Result и оно само пробрасывает эксепшены, если надо. В гошке ты как проклятый пишешь err!=nil снова и снова, весь код засран этим говном.
>>3305759 >В гошке ты как проклятый пишешь err!=nil снова и снова, весь код засран этим говном. Можно не писать на говне? Алсо, а макросы у вас есть? Для какой-нибудь подобной фигни, например, в си при пользовании либы курсес я тупо макросами оборачиваю как надо.
>>3305759 >пишешь err!=nil снова и снова Это специально придумано, чтобы каждый раз задумывался как правильно обработать ошибки, а не свалить всё на самотёк.
>>3305675 Потому что пидораст маркетингом занят, а го серьёзные люди делают, им не до завлекушных соевых свистоперделок типа стопятисотого нескучного объяснения системы владения.
>>3305664 В го есть http огрызки на базе фаст-хттп. Там даже где-то на оффсайте это пишут, но зеленные продолжают таскать сокетные тесты с роутером, против реальных фреймворков.
нигде не вижу годного туториала как делать загрузку картинок на бекенде помогите плиз понятно что хранить ее будем не в базе а в файловой системе но как все сделать чики пуки не понятно
>>3262042 (OP) Подскажите, а как в Go относятся к тому чтобы в одном методе репозитория было несколько сырых SQL-запросов? Ну например когда объект с внешними ключами или есть ассоциативные таблицы, и чтобы его создать нужно внести записи в несколько таблиц. Какой в таких случаях хороший тон: все делать в одном методе или разбивать на несколько и вызывать все из сервиса? Меня смущает что методы выходят очень громоздкие
>>3306050 Оно же у тебя завёрнуто в транзакцию? Одна транзакция − один метод. Если не завёрнуто, то стоит сперва озаботиться хорошим тоном в работа с бд. Если совсем громоздко получается, то можно использовать DTO.
>>3306054 Да, собираюсь заворачивать, только я хотел завернуть в одном методе как ты предлагаешь, а коллега считает что нужно вызывать все четырьмя методами из сервиса, где каждый метод корреспондирует таблице в которую вносим записи
>>3306060 И управление транзакцией всплывает на уровень сервиса? Звучит как делай по букве из солида ради буквы из солида, а на остальное похуй. Если уж делить, то всё равно сделать один основной метод, который будет вызывать мелкие методы внутри.
Есть задача, в ней надо считать три цифры через пробел с клавиатуры. ЧатЖПТ предложил мне решение с пика 1. Но оно не работает. Интернет мне подкинул ответ в виде пика 2, но пробел же вроде входит в ASCII и с ним не должно быть проблем?
>>3306080 Не работает − отдебажь. Напечатай сначала input после ввода, потом parts после деления. Поймёшь, в каком месте не работает. Тебе же надо научиться понимать, в каком месте ошибка, а не зелёную галочку за решение задачки. Алсо, второй пик не про это вообще, а про руны vs байты. С цифрами, латинскими буквами, пробелами и пунктуацией проблем нет, разница появится, когда кириллицу и другие алфавиты будешь использовать. И вообще у тебя в коде ничего этого нет.
>>3305759 >>3305852 Петушарперы поспешают на захист барена. При этом как обычно читают жопой.
Речь шла о нескольких асинхронных тасках и там уже надо городить огород с Task.WhenAll(), а AggregateException нужно обрабатывать, чтобы получить все ошибки, а не только первую.
>>3306674 Какое же муторное говно (мимо проходил и сел это читать). Ради чего "старые из гугла" это придумали? Чем это отличается от того чтобы просто прочитать файл?
>>3306969 А нахуя мне жирного кормить? Любой нормальный разработчик, может открыть доку где зелёным по черному расписана мотивация. Идти на оранжевый за ответами - признак тролля/долбаеба. Ярлык сам себе повесь, какой больше нравится
>>3306553 И опять: >При этом как обычно читают жопой.
Я с самого начала про это писал. >И на фоне этого пиздеца, гошные ErrorGroup вполне себе нормально смотрятся. Разница в том, что в Го тебе сразу говорят, что ты будешь ручками обрабатывать ошибки, а в шарпе тебе обещают что эксепшены просто работают*.
>>3307006 >Любой нормальный разработчик, может открыть доку где зелёным по черному расписана мотивация. Это верно для нормального языка, но где об мотивации написано тут?? https://pkg.go.dev/embed
>Идти на оранжевый за ответами Да я уже понял что ты сам не знаешь.
>>3307014 Да, эксепшены в шарпе просто работают, сам к этому выводу пришел и не надо руками имитировать исключения на каждый пук - а просто берешь и пишешь в нормальном флоу.
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 есть, хотя вот живут же ЯП без коллектора и ничего. А диды так вообще на перфокартах хуярили, зачем надо было все эти асмбли, фортраны, лиспы и прочую залупу с абстракциями выдумывать
>>3307103 Мы говорили о мотивации, ты высрал свою, а там о мотивации не было ни слова, значит ты звездобол получается? А криков то было.
Я читал и без тебя описание этой техи, и я спросил, нахрена деды ввели целую новую семантику в язык, ради сахара вида File.readAll()? Но при этом все до блюваты пишут err != nil ??
>>3307136 Диды ввели сахар для безопасности и быстродействия
По поводу обработки, то я нигде не говорил, что кайфую с err != nil охуенным дизайнерским решением. Но трай/кэтчи мне нравятся ещё меньше. Потому что с заковыристой бизнес логикой гошные подход обработки ошибки дает большую информативность.
>>3307146 Я к тому, что какую-то херонину добавили, которая нужна пару дедам в гулугулу, а главный геморрой языка не трогают, мотивируя что наш язык неизменяем и консервативен.
Где почитать как работать с транзакциями и postgres в го? Писать запросы в базу при помощи pgxpool я научился. Теперь хочу научиться писать такие случаи, когда в одном методе сервиса нужно открыть транзакцию в ней сделать несколько обращений в репозиторий. В каловом джава спринге все решалось аннотацией @Transactional, а сейчас я вообще не пойму где эти транзакции открывать, в репозитории, или в сервисе - а потом прокидывать в репозиторий?
>>3307349 В идеале сервис не должен знать про транзакции, транзакции должны быть чисто на уровне абстракции репозитория, тк это часть работы с внешним плагином бд, а не чистой бизнес логики, которая относится к сервису. Ну и транзакции желательно делать поменьше, бд как примитив синхронизации это не супер кул. Отсюда следует, что ты в среднем не хочешь делать транзакции длиною в жизнь (вне зависимости от яп). Это все вообще к го не относится, просто общие архитектурные принципы, которые иногда при большом желании можно нарушать.
>>3307396 >Ну и транзакции желательно делать поменьше, бд как примитив синхронизации это не супер кул. Отсюда следует, что ты в среднем не хочешь делать транзакции длиною в жизнь (вне зависимости от яп).
Ну, про супер долгие транзакции речь не идет. Но вот на текущей работе у нас прям как обязательное правило принято, что сценарии бизнес-логики обязательно должны быть под serializable транзакциями, если хоть где-то в базу вставляем. И вообще правило такое, что если мы делаем select + update (пусть несколько раз из разных баз данных), то это всегда одна транзакция. Да, на базу данных у нас очень много чего завязано, мы очень строго следим за консистентностью данных.
>>3307349 Открываешь в сервисе, прокидываешь в репозиторий. Транзакциями надо управлять явно, так намного ниже вероятность поймать дедлок, idle in transaction и прочие N+1 приколы. Все функции, которые ходят в бд, должны принимать транзакцию одним из аргументов. В хайлоаде ты должен четко понимать, где начинается работа с бд и где заканчивается, петушиный unit of work пусть остается в легаси говне с абстрактными фабриками.
Но в гошке часто говорят, что использовать контекст для чего-либо помимо таймаутов, отмен и прочего -- моветон. И что никакую бизнес-логику туда нельзя пихать. А мне все-таки очень зашло использование контекста для транзакции. То есть методы репозитория умеют работать с контекстом и получается внутри одной транзакции можно довольно легко использовать разные методы репозитория. Просто в сервисе создаем контекст и передаем его в первый используемый метод репы, потом этот же контекст во второй и так далее, как угодно по логике. Уходит куча бойлерплейта с роллбэками и коммитами.
>>3307518 Так а почему все таки плохо использовать контекст для значений? Понятно что интерфейс контекста не очень подходит для этого. Но ведь и мы не ебланы. С хорошим враппером никаких проблем нет.
>>3307626 Скрываются зависимости. Вот кто-то написал эту хуйню, а тебе надо в ней разобраться, что-то поменять, и ещё оттестировать. И сразу хочется автору кода ебучку вскрыть.
Пацаны, поясните за обработку ошибок. Там выше кто-то уже спрашивал, но мне кажется тема ерроров осталась нераскрыта.
Допустим у меня http обработчик сидит в самом верху, дергает метод из пакета (будем считать для простоты, что у меня 1 application layer = 1 пакет) А, тот дергает метод из пакета В, тот дергает метод из пакета С. Каждый из пакетов имеет свою структуру для ошибок: ErrorA, ErrorB, ErrorC, которые я могу набивать всяким полезным контекстом, чтоб потом его высрать в тело респонса жсоном. Собственно два вопроса:
1. Как лучше сделать: чтобы пакет B при получении ErrorC оборачивал ее дополнительно своей ErrorB? Или ErrorB -- это чисто ошибки, относящиеся к самому пакету В? В первом случае вроде получается чето более-менее похожее на нормальный стектрейс, если у всех ошибок будет допустим какое-то поле Cause error, но тогда наверху у меня всегда будут только ошибки ErrorA, и если мне нужно разное поделать в зависимости от того, что же там за real cause была -- будет неудобно. Во втором случае стектрейса никакого нахуй нет, как такие ошибки например логгировать с пользой -- непонятно, но код проверки ошибок в обработчике становится хотя бы поприятнее.
2. В обоих этих случаях выходит так, что обработчик должен быть в курсе обо всех ошибках, которые могут произойти во всем ебаном приложении, то есть он должен знать и про ErrorA, и про ErrorB, и про ErrorC. Чето я слабо себе представляю, как такой подход будет скейлиться, если аппка становится хоть сколько-то большой (ну там на пару десятков эндпоинтов хотя бы). Какие есть альтернативные варианты? Я сам чето ничего не надумал более умного.
>>3308189 Имхо оборачивать, но своим интерфейсом, чтобы всё было одинаково и можно было размотать без гигаобработчика. Вот самый простой вариант, на каждом уровне прикрепляешь предыдущую ошибку и какие-нибудь энтри сразу в жсон формате, чтобы в логи срать удобно.
>>3307518 >Я пришел к подходу прокидывания транзакции через контекст. Гоферы изобретают ООП. Сам ООП объект это контекст для методов внутри, при том у вас есть такой функционал, нахрена вы устаревшие процедурные паттерны используете?
Мыши плакали, кололись, но продолжали грызть кактус
>>3308189 >Пацаны, поясните за обработку ошибок. Ее просто нет, страдай как хочешь. Вместо семантики в языке и реализации чего-то в компиляторе - проще было выпустить статью, ошибки это значения и положить болт.
>>3307146 Когда я кодил на 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-Й СТРОЧКЕ! ЧЯДНТ?!
>>3312574 имею ввиду, почему в случае замены значений всё срабатывает, и слайс меняется по ссылке, но аппенд не аппендится по ссылке, хотя капасити хватает?
>>3313466 тогда вообще не понял, почему при 16к ячейка отмечена зеленым цветом, а при 11к красным ? Если при 16к сложнее ? И получается с каждым годом все легче вкатиться в го ?
никак не могу вкурить что такое интерефейс ментальная модель в мозгу - ну это типо сигнатуры методов которые ты можешь присобачить к любому типу при этом interface{} это интерфейс без методов, а значит по умолчанию выполняется всеми типами (потому что у типов типо может и не быть методов)
короче полная хуйня никак не пойму а ведь это ключевая вещь (судя по моим путешествиям по коду стандартной либы и других популярных библиотек)
Второй вопрос (косвенно связанный с первым) У меня есть структурка (которая на самом деле джсон) мы ее маршалим анмаршалим
у этой структуры есть поле парамс внутри которых тоже есть вложенные структуры (их я тоже описал) и теперь внимание допустим мне надо делать аутенфикацию я создаю функцию AuthMessageSend() и бла бла, допустим мне надо изменить параметр и я снова пишу функцию RewriteParamMsgSend() вообщем повторяемость кода, как решить проблему? я бы просто создал функцию send(params &BaseMessage) но теперь я как бы перетащил сложность из функций в ее вызовы
>>3315181 >никак не могу вкурить что такое интерефейс duck typing курильщика. В обычной динамодристне - ты просто дергаешь методы Swim() и Fly() и все. В Го тебе надо объявить интрефейс Duck с этими методами и попытаться привести твой тип к типу Duck, если тип реализует все методы интерфейса - то приведение будет успешным.
>при этом interface{} это интерфейс без методов, а значит по умолчанию выполняется всеми типами (потому что у типов типо может и не быть методов) Да, т.е. фактически это способ сказать - любой тип. Сейчас рекомендуется использовать any вместо него, то же самое, но более читабельно.
>у этой структуры есть поле парамс внутри которых тоже есть вложенные структуры (их я тоже описал) и теперь внимание допустим мне надо делать аутенфикацию я создаю функцию >AuthMessageSend() и бла бла, допустим мне надо изменить параметр и я снова пишу функцию RewriteParamMsgSend() вообщем повторяемость кода, как решить проблему? я бы просто создал функцию send(params &BaseMessage) но теперь я как бы перетащил сложность из функций в ее вызовы Используй дженерики https://pastebin.com/YFApzvVE
Правильно ли я понимаю, что начинать изучать и пытаться вкатиться в го абсолютно бессмыслено, если ты не хотя бы студент 3-4 курса? Просто я слышал какие дифирамбы поют языку, он на хайпе и востребован, и видимо инфоцыгане подхватили это.
На деле работы нет, а точнее для вкатунов - буквально чуть ли не 0, т.к. из-за сферы и задач (бигтех и микросервисы) - туда не берут с улицы и отбор с требованиями серьезные. Нужны мидлы+ одним словом, судя по вакансиям А конкурировать с тобой будут скорее всего перекатуны, что делает шансы на вкат буквально нулевыми
Ну и есть еще возможность попасть на курсы и стажировку от какого-нибудь бигтеха, но там опять же ищут студентоту и этот вариант доступен только для ДС2/ДС2/Казани
>>3316703 В го не надо "вкатываться". Т.е., если ты не умеешь программировать, то _не_ надо учиться этому на го. Это сложный язык с кучей подводных камней. Независимо от того, что говорят по этому поводу клоуны с ютуба и прочие инфоцыгане.
нах он нужен? 1. интерфейс нужен для инверсии зависимостей (5п солид), это когда ты напиздячил много структур, под них вхуячил кучи методов. потом начал их вызывать друг в друге и чтоб не соснуть циклический импорт ты используешь контракты вместо самих типов
2. в случае когда ты хочешь дергать разные структуры за метод с одинаковой сигнатурой (написав 1 функцию вместо 2х для разных типов), ты можешь дергать интерфейс(если обе структуры соответствуют твоему контракту интерфейса)
3. псевдодинамическая типизация (переменная при инициализации выберет тип а не про обьявлении), например ты хочешь любую структурку десерелизовать пиздячишь тип any/interface{}, кайфуеш. но потом соснешь когда будешь угадывать какая модель тебе придет
это бд, кеши, очереди/шины, сети, cicd, тестирование, архитектура(на уровне приложения и бывает на уровне продукта) и какойто язык описания взаимодействия этого всего добра.
вот сейчас уже ты прикинул что у тебя будет на пеке dbeaver, git, оболочка sh + unixBasedUtils + возможно питон/руби, docker, postmant, wireshark/charles, miro/draw.io.
сам язык это дай бох 40% работы. остальное время ты ебешься с конфигом, ищешь баг в кафке, оптимизируешь запрос к бд, пишешь скрипт деплоя.
какой ты язык выбрал это мало решает короч
но у го минус в микросервисной архитектуре, даже там где она не понадобится, изза этого гошники на порядок лучше жавистов/питонистов/пыхеров знают devops практики, архитектуру, сети. именно поэтому тут не место вкатунам с нуля, хотя гдето на пыхе полгода посидите потом приходите
>>3318618 Все умные слова, перечислил, какие только знал, лол. И язык ничего не решает, да. Если пишешь систему учёта лайков. Нарожали вас, эпигонов, на свою голову, лол.
>>3318618 Вкатился в Го почти с 0, имея не коммерческий опыт разработки на питоне/котлине.
Не пугай людей. Хотя истина в том, что для вкатунов реально работы 0 + по опыту скажу, что очень сильно решает чуть-чуть выше базового знание Kubernetes. Как минимум написать простой хельмчарт должен уметь и понимать, почему тут деплоймент, там стейтфул сет и зачем нужен хпа с ресурсами.
if isSpam, word := post.CheckSpamlist(board.Spamlist); isSpam == true { error.Code = 16 error.Message = "В сообщении присутствует слово из спам-листа." } else if isSpam, word := post.CheckSpamlist(models.GlobalConfig.Spamlist); isSpam == true { error.Code = 16 error.Message = "В сообщении присутствует слово из спам-листа." } }
Я - вкатун вротендер, вот уже почти 2 года учил фронт, инглиш и матешу (школьную). И у меня уже нехорошее чувство что я не смогу найти работу с такими же вкатунами.
Честно скажу, я не до конца освоил фронт. Вот только осенью сам сверстал сайт ресторана без реакта, естественно сам сайт убогий, без адаптаций и прочих финтифлюшек. Я вот только-только начал понимать JS, а реакт я до конца зимы освою (уже поделал пару хуйн). И чувствую, что и прочую пиздобратию ввиде TS и стейт-менеджеров я освою к концу весны след года.
Вопрос: Мне вообще стоит этот последний рывок делать? Потому что я уже откликался на вакансии джунов ИИИИИ ни-че-го. Всем похуй.
Уже начал учить го, и мне в целом это больше нравиться чем вротенд мейби это всего-лишь потому-что я глотнул свежего воздуха.
Английский я кста хорошо подучил, учил реакт по их документации, но все равно это не то же что и учиться на русском. А на го больше материалов на англюсике. Может на джаву перекатиться?
Если будете лолировать, что я учу школьную матешу то мне похуй, я уже понял что ваша матеша хуйня постная и матан, линал и дискретку я как нехуй делать освою через 3 года
Мне понравилась ваша хуйня, но вакансий на джуна нет, хотя так вроде сейчас со всеми языками. Стоит ли дальше вкатываться, если студентик-долбоёб, который до этого лабы на плюсах с помощью чат гпт делал?
>>3326565 Не надо го. И джаву не надо с такими-то талантами. Учи PHP. Если более-менее знаешь PHP, HTML, CSS, JS (просто JS, без реакта) - работу найдёшь всегда.
>>3332216 Чувак, го - очень сложный язык. С кучей подводных камней. Просто большинство вкатунов настолько тупые, что эту сложность в упор не видят. Собственно, поэтому их и не берут на работу.
>>3332265 >>3332216 не отменяет факта, что джуновских вакансий - 0 начните с php java, потом в go можно будет перекатиться или навсегда остаться в скуфляндии
>>3332329 Java - сложная технология, с высоким порогом вхождения. Не язык, а именно технология в целом (платформа, если угодно).
Да и сам язык, хотя и простой и недвусмысленный, в отличие от го (и многих других), но выучить его вкатуну с улицы будет непросто, ибо статическая типизация и т.п. И он весьма многословный. Это не недостаток, а особенность. Но, вкатуну будет тяжело.
Начинать надо с питона или php. На пыхе ниже порог вхождения, проще найти работу с низкой квалификацией, ибо на питоне веб довольно сложный, по сравнению с, а на пыхе - он бывает очень разный.
Что-то хайпец по Го как-то поутих. В прошлом году повеселее было.
А потому, что нехуй было создателям языка множить сущности и вводить дженерики. Нарушили свои собственные принципы и обещания. И всё пошло по пизде. Магия развеялась.
Хотя, они старались. И сделали их чисто по-гошному - через лютейшую, невероятную, просто невозможную жопу. Очень старались, чтобы было не как у всех. Но - не помогло.
>>3332454 Проблема джавы это семейство spring, которое идёт обязательным довеском к любой java вакансии. Т.е помимо знания языка ты должен знать охуеть какое кол-во фреймворков чтобы иметь возможность работать Лучше вкатываться в kotlin/clojure из джава семейства. Там хоть вся это ебатория отсутствует
привет. Подскажите, как научиться писать код на го ХОРОШО? чтобы смотреть на него и говорить "да, это крутой код потому что A, B,C". Вот я уже 3 года работаю в ит, все время пишу на го. Но весь опыт пишу просто "ну так работает и норм". А хочется писать ХОРОШО. Уже задавал этот вопрос в го треде, предлагали какие-то книжки по java читать
А кложура в 2024 - нетипизированное говно без задач. У сообщества резко пропал интерес к этой теме. Manning даже мега-книжку по стандартной библиотеке кложуры ( Clojure, The Essential Reference ) заморозил _восемь_ лет назад в стадии MEAP (недописанный пре-релиз), и так никак и не издаст.
А я её тогда купил, лол. Правда, она почти готова, все главы написаны, читать можно. Но, тем не менее, это отличный индикатор отсутствия в обществе интереса к теме. Сейчас посмотрел - обещают релиз в январе 2025-го, посмотрим. https://www.manning.com/books/clojure-the-essential-reference
Так что детям - лучше в питон.
>>3340661 SICP почитай. FP in Scala почитай. FP in Java почитай. И после этого тебе перехочется писать на Го.
>>3342659 Уточню по кложуре - они начали издание этой книги 8 лет назад. Потом оно тянулось-тянулось, и в июле 2021 вышла последняя на сегодняшний день версия (31). И всё. Т.е. последние 3.5 года - тишина. Похоже, и автор и издательство совершенно потеряли интерес к теме. Да и работы практически нет, не только в России, а вообще везде.
А если программировать учиться - то лучше Scheme (Racket) и SICP, кложура сложновата для вката для того, кто лиспа до этого в глаза не видел.
>>3342659 >Ну нахуй. Поживёшь - увидишь. Ясно Манька, слился. Типикал пиздабол, который только воздух и может сотрясать, дабы себе очков "ИЛИТАРНОСТИ" набить.
Хуй знает чел, скока мне ещё жить и на го писать, чтобы сложность найти. Во уже 6ой год пошел, все никак "супер подводных камней" - не нашел.
>>3342670 На кложуре мало вакух, да Но при этом если удалось устроится в кложур команду, то эт 100% команда профессионалов с которому и можно норм работать.
>>3343319 Ну как минимум ты можешь к самураям постучаться, из СНГ. Они рекрутят регулярно, потому что они берут в команду шоарящих, но отбор у них сложный, да
>>3352792 Жабе хуева из-за спринга. Выше тут говорилось
goвно не лучший язык. Но на нем пока ещё можно давать. Однако тенденция к введению новых синтаксических конструкций, в угоду всяким свистоперделкам (под которые язык не дизайнидся) не приведет нас ни к чему хорошему.
Что думаете по поводу того, что компания, которая занималась и занимается разработкой Go - Google - постепенно идет на дно и в скором времени станет очередным полудохлым Oracle?
>>3355641 Как ты мог выучить язык, если ничего на нём не писал? То, что ты называешь "выучил" - это просто иллюзия. Про Даннинга-Крюгера слышал? Вот ты сейчас на самом пике и есть. Спускайся в долину, если не зассал, лол.
Нубский, наверное, вопрос, ну да ладно. Вот есть стандартный http-сервер. И на каждое новое соединение этот сервер создаёт го-рутину. И вот кол-во запросов нарастает, запросы не успевают обрабатываться достаточно быстро, а го-рутины всё спамятся и спамятся, засирая память, пока она не закончится. https://youtu.be/3fWx5BOiUiY?t=221 А как сделать так, чтобы не память бесконечно засиралась, а просто чтобы время обработки запроса спокойно себе увеличивалось? Ограничить кол-во го-рутин (как?) или ещё как-то?
Но если хочешь поизучать настройки сервера, то стандартная структура предоставляет набор конфигурируеиых параметров. Включая максимальные размеры реквестов. https://pkg.go.dev/net/http#Server
>>3358674 Нельзя просто так взять и увеличить время обработки. Как ты себе это представляешь? Замедлить процессор? Допустим, ты его замедлил, и что это тебе дало? Куда теперь деваются необработанные запросы, которые продолжают поступать?
Такое вообще делается через очередь. Т.е. если сейчас нет ресурсов - запрос ставится в очередь. И очередь эта - тоже в памяти, представь себе. Т.е. все необработанные запросы должны накапливаться в памяти. Ну, можно ещё в файл или БД сохранять, но, в данном случае это глупо.
Так вот, в Го такое делается через горутины. Они ждут во внутренней системной очереди, пока не будут обработаны. И горутина сама по себе - это весьма легковесный конструкт, и мало что добавляет к расходу памяти. Так что, не ссы - всё в порядке.
Есть ли у кого нибудь пример репы проекта на ресте где можно посмотреть на архитектуру? Мне интересно как выглядит архитектурно запросы на сторонние сервисы с сохранением у себя, как делают эвент лупы и вот все такое.
>>3361223 блять, какой же человек приколист, задаю конкретный вопрос, его ответ "ну пиши на других языках и читай книги для других языков". Гениально блять, как я сам не додумался
>>3361230 Шизоид думает, что СИКП это про функциональщину. Мда, пиздец конечно вкакуны средний уровень по больнице занизили. Скоро дебики кроме как СОЛИД ничо из себя выдавить не смогут