Go или Golang — компилируемый язык программирования от создателей таких шедевров, как UTF–8, язык С, UNIX, Plan9 и других. Go поддерживает типобезопасность, имеет богатую и универсальную стандартную библиотеку и инновационные семантики одновременности: все то, что мы в индустрии называем concurrency и parallelism. На сегодня язык Go является маяком стабильности, прагматичности, де-факто представляет из себя стандарт в мире бэкенд–микросервисов и серверного оркестрирования.
>>2665535 Полная обратная совместимость. Можно поставить последний компилятор голанга и запускать старые программы. А в дотнете каждый год надо переписывать программы на новый дотнет или маяться с подключением старых дотнетов, которые как правило удаляют из репозиториев и фиг снова установишь.
>>2667002 Очевидно ты, потому что в репорте написан какой-то нечитаемый бред уровня "я ебаль ийо рука", ну и конечно классика индусоговна "NOT PROPERLY WORKING". Олд тебя бы еще назвал говноедом и обоссал, но очевидно мейнтейнеру КоК этого не позволяет, так что он послал очередного долбоеба нахуй максимально вежливо.
В чём отличие объявлений следующих функций: func FuncName(arg []any) func FuncName[T comparable](arg []T)
Чатгопота мне затирает, что во втором случае якобы нельзя принять слайс с различными типами, а он прекрасно обрабатывается в обоих случаях. Так в чём же отличие?
>>2667437 Да. Сейчас обнаружил различие. Первый случай обрабатывает только интерфейсный слайс. Сколько же пиздабольства я сейчас выслушал от чатгпт. Абсолютно противоположное утверждала.
>Действительно, при передаче []string{"hello", "world"} в первую функцию func_name(arg []any) не возникнет ошибки >Так она возникает >Ой, извините >Действительно, при передаче []string{"hello", "world"} в первую функцию func_name(arg []any) не возникнет ошибки
Программист уровня /b/. Гопоте еще даже вкатуном не быть.
>>2667427 >Чатгопота мне затирает, что во втором случае якобы нельзя принять слайс с различными типами ну это верно. в []any у тебя в каждом элементе могут быть совершенно разные типы. а в []T у элементов будет один тип, который соответствует констрейнту. т.е. нельзя float32 и int например смешать.
>>2667828 Что ты имеешь ввиду под миграциями? Если про создание таблиц в бд, то у тебя есть CREATE TABLE IF NOT EXISTS, буквально ее любая тулза для миграции и заводит лол
В голанге вообще нельзя получить доступ к значению ключа через поинтер? Нижеуказанное не работает со второй строки. mymap := map[string]int{"a": 1} point := &mymap["a"] *point = 2
>>2668078 Так ты в любом случае так или иначе будешь из переменной какой то его пиздить, а не добавлять вручную, и про какой ты оверхед я что то не поняла, уж выделить 4 байта на указатель процессору будет явно не тяжело, поверь
Если прям совсем лень создавать переменную, то можешь сделать, только не забывай, что оно будет указывать уже на новую переменную, а не твою оригинальную, если ты туда for some reasons будешь передавать что то другое, не могу представить только зачем
>>2668063 Я не знаю, что такое миграции, потому что нигде толком про это не пишут. Слышал, что надо скачивать программы с гитхаба от левых чуваков и они генерируют эти миграции. Зачем? Не знаю.
>>2667828 1. Это вообще не связано с языком. Ты можешь тот же ликвибейз взять и использовать. 2. Если нормальная прод система, то да надо использовать и миграция это отдельный шаг выката на прод.
>>2668202 Я бы сказал - нет, достаточно знать что они есть и представлять как в целом они работают. Но сколько компаний столько и мнений, меня пару раз в тестовых просили создавать базу с помощью системы миграций. я правда не вкатун
Как правильнее объявить пустой слайс? Нахуя нужны два оставшихся, когда ты назовёшь наиболее кошерный? a := []int{} b := *new([]int) c := make([]int, 0)
>>2668336 >Нахуя нужны два оставшихся Это же ГОВНОЛАНГ, простой язык! Поэтому мы добавили десять синтаксисов для каждой фичи, а также завезли неоднозначность грамматики, ну чтоб было веселее. Простота!
>>2668067 Я понял, что ты хочешь сделать. Так делать не надо. Даже если бы было возможно - не надо. Не делай так. Поверь дяде, кака это плохо, брось каку.
>>2668749 Мапа в го периодически двигается в памяти с места на места. Надо тебе ебатория о том почему у тебя вдруг указатель указывает на нихуя и ты внезапно ловишь сегфолт? Надо бля?
пик 1. Почему capacity слайса уменьшается только в этом моменте s = s[2:]
Тут мы выкинули первые две цифры из слайса и объем его уменьшился на эти 2 цифры. Но почему чуть выше где s = s[:4] объем слайса не уменьшается?
пик 2. Пустой слайс поначалу. Добавили 0, длина - 1 и объем - 1. Потом добавили 1. Длина - 2 и объем - 2. Потом сразу 3 цифры добавили. Длина стала 5. Но почему объем стал 6?
>1. Почему capacity слайса уменьшается только в этом моменте Потому что слайс обрезается только с одной стороны, со второй тебе его и возвращает, считай просто оффсет
>Тут мы выкинули первые две цифры из слайса ~snip~ А тут ты считай взял весь массив целиком, без оффсета, но длину ему только 4 указал
>~latest snip~ А все просто, собсна капасити увеличивается не так, как увеличивается длина, капасити у нас длина помноженная на два, и собсна увеличивается, если при добавлении у тебя len > cap становится, после тысячи там уже по 10% только добавляется
Короче, я готов признать, что я макака, который не знает как работает этот ёбанный multipart/form-data Проблема некст: нужно получать мультипарт частями и отправлять полученную часть на другой сервер (minio), не записывая весь файл в память, так вот возник вопрос, есть ли возможность это реализовать или это ебанина такая же как и мой говнокод, который я настругал, пытаясь решить эту задачу?
>>2669227 >Тут мы выкинули первые две цифры из слайса и объем его уменьшился на эти 2 цифры. Но почему чуть выше где >s = s[:4] >объем слайса не уменьшается? Ну допустим твой слайс [0:5] это длина от Москвы до Нижнего Новгорода и он уже аллоцирован. Если ты обрезаешь его [2:5], то это расстояние от Петушков до Нижнего Новгорода. Аллоцировано при этом всё расстояние от Москвы, но ехать тебе только от Петушков до НиНо и не дальше. А если обрезать [:4], то это расстояние до Дзержинска от Москвы, но при этому у тебя есть уже аллоцированный запас до НиНо.
Вопрос про оформление кода. Как правильно переносить длинные строки кода? К примеру, есть длинная строка с сигнатурой метода, то как её перенести на новую строку, чтобы было красиво, читабельно и идеоматично? Если просто какой-то параметр функции перенести, то он выравнивается по первому табу и сливается с кодом ниже. В итоге получается не читабельно, но именно так выравнивает линтер. Может надо делать как-то по другому?
>>2670234 Дак никто не скидывает книгу, где пишут реальное веб-приложение не как в дотнете. Единственный, кто показывает как можно написать реальное веб-приложение, пишет всё как в дотнете. Приходится разбираться в этой дотнет параше с рефлексией и тонной абстракций на абстракциях.
>>2670296 Книга даёт гарантии, что информация достоверна, не оборвется на полуслове, можно планировать своё обучение. Видосики не нравятся, в них много мусора и темп редко совпадает с моим. Автор либо тараторит, либо засыпает. Ещё раздражает, когда полчаса разглагольствует, а потом за 5 минут торопится выдать всю инфу. Встречались даже курсы, где препод не успевал дописать программу за пару, в итоге у тебя оставался незаконченный пример. С книгой такого нет.
Вызывать их тоже самое, что и спиздить поле из структуры, можно зааппендить в какой то слайс новые значения (главное что бы капастили не привысилось), тогда ты увидишь фокус, что сама длина массива как бы уже выше, но len твоей переменной все равно остался прошлым
>>2670356 Из не инициализированной map можно читать она ведет себя как пустая, а вот при попытки записи будет паника. Решение крайне хуевое, потому что нужно знать про эту "фичу" когда дебажишь сообщения с паникой.
>>2669820 ну я стараюсь этих двух вариантов придерживаться, aka единственные два варианта, где перед телом нет отступа и тело визуально не смешивается с сигнатурой. gofumpt помогает.
>>2670444 Мда, поинтер остаётся на старом адресе и можно соснуть крепко. a := make([]int, 0, 2) a = append(a, 123) point := &a[0] fmt.Println(point, a) a = append(a, 4, 5, 6) a[0] = 789 fmt.Println(point, a)
>>2670468 А как ты собираешься это хотя бы теоретически реализовать, у тебя физического места нету, а значит нужно делать новые указатели, переносить куда то их, ничего странного в этом поведении нету, это вполне ожидаемо, такое везде
>>2670459 Если надо, могу помочь с чем то в телеге, но скорее буду отвечать на вопрос/ответ как что работает или как что сделать, менторить прям полноценно не смогу, только вопрос-ответ
>>2670501 Спасибо. Но думаю зря потрачу только твое время. Я вкатываться во фронт буду. Бэк слабо знаю. И ещё не определился на чем изучать его. Параллельно ковыряю пхп, сишарп и го. Но все же склоняюсь к пхп. Уж слишком мало у меня говакансий
>>2669565 А в чем конкретно проблема? Перекидываешь из одного сокета в другой через фиксированный буфер в памяти. Что именно у тебя не работает в таком подходе (самому интересно)?
>>2670466 >В чем проблема сделать структуру, если у тебя настолько много параметров? Если больше 3, значит однозначно нужно делать Это не имеет отношения к тому, что я писал.
кого из интересных людей можно посмотреть? Вот у жсеров есть очень толковый Илья Климов, стримы которого всегда интересно смотреть, есть ли кто-то подобный у гошников?
>>2671314 Как можно смотреть лекции по программированию? Как вы это делаете, зумеры? Говорящая голова гнусаво полчаса проговаривает то, что можно прочесть за пять минут, а по диагонали - 9а полторы
Объясните, пожалуйста, в чём сакральная прелесть помещения методов в интерфейсы? На пике для достижения результата 1 и 2 надо дополнительный код писать, а можно просто вызвать напрямую в примере 3 и 4. Так зачем в документации рекомендуют делать сложнее? В чём профит?
>>2671258 Можно подумать, что кто-то что-то не из книг смог предложить. Я привёл пример книги Адама Фримана, где разрабатывается полноценное приложение, а в ответ только насмешки. У вас нет альтернативы или просто не хотите делится из-за жадности. А жадность и глупость всегда идут рядом и явно не признак высокого айсикью.
>>2670652 Попробовал много всякой хуйни, по итогу сошлись на мнении, что мультипарт нормально не парсится на части в потоке, а прокидывать полностью не получается, потому что мимы файла теряются при такой передаче(хотя сам файл в потоке сохраняется и оперативу не жрёт, только после выгрузки, ты нихуя с ним уже не сделаешь, потому что из архива получилась тыква). Сначала нужно на принимающем серве закинуть мимы, потом файл. Если есть предложения, как это правильно прокидывать, то было бы неплохо описать процесс, потому что все примеры из этого вашего интернета говна кусок, которые сначала прогружают весь файл с мимами в оперативу, потом льют на другой серв/сохраняют у себя на постоянке
>>2671424 ну на практике в 99% случаев чтобы замокать зависимости и написать юнит тесты, покрыв хуево тестируемые кейсы (сетевые походы или неожиданные ошибки от БД например). в 1% случаев чтобы иметь код, который может работать с разными имплементациями одного интерфейса, потому что бизнес-логика так легче реализуется. (да-да, в сишке как-то без этого костылилось, но все-таки)
>>2671424 Конкретно на данном примере это передать сложно. Но представь себе ситуацию, когда у нас ручка идет в базу и еще в несколько мест. Ты как хороший программист будешь писать тесты для этой ручки, соответственно в твоем тесте при этом раскладе тебе придется идти в базу, что не очень хорошо. Куда лучше будет, если твой handler/router не будет зависит от конкретной реализации репозитория а будет просто ссылаться на интерфейс, который должен реализовывать какие-то там методы. В данном случае репозиторий можно очень просто мокнуть и протестировать ручку. Кроме всего прочего когда твоему хендлеру просто нужна хуевина которая условно умеет только Get/Set. То ей по факту вообще похуй на реализацию, это может быть что угодно. База, диск, облако, сесть.
Сап. Праздный вопрос. Пишу простенький пет проект, проблема следующая: сил нет очень хочется сделать вот такую абстракцию над мютексами в виде функции, которая принимала бы сам мютекс и какой-то generic-callback, в котором доступы к общей памяти переданный мютекс бы защищал. Моя голова родила что-то вроде пикрелейтед, но оно не очень хочет компилироваться.
Хочу услышать совет, можно ли подобный механизм реализовать вообще и если да, то как это можно эстетичнее сделать.
>>2671486 А, значит я не совсем уловил семантику работы сигнатур вместе с any. Просто суть в том, что я хотел бы пробрасывать функции вообще с любой сигнатурой в Locker. Как если бы мой общий тип при каждой конкретной подстановке редуцировался до конкретного типа принимаемой функции. Почитал про дженерики немного и смог родить вот это
type General[Get any, Return any] func(Get) Return
Но теперь проблема в фиксированной арности моего коллбека, ровно один аргумент принять и ровно одно значение отдать. f func() так же выдаёт ошибку типов. Просто хотелось бы сделать что-то вроде как пикрилейтед в плюсах: есть общая сигнатура функции с переменными типов, при подстановке конкретной функции конкретный типы соответственно выводятся. Но судя по всему так сделать не получится, либо выйдет уродство совсем.
>>2671544 > семантику работы сигнатур вместе с any В го нет ко- и контрвариантности. Это простой язые. Поэтому []byte и any[] - это разные вещи, func() byte и func() any - тоже разные вещи. Иногда их можно скастовать руками.
>>2671544 В общем решил всё таки просто func() T передавать, замыкать на аргументах и каждый раз явно возвращаемый тип указывать, вышло что-то вроде такого:
>>2671621 Функция работает с чем надо. Просто нельзя напрямую сделать тайп свитч от T. А от any можно. Простой же язык. Просто сделай переменную, которая тете будет нужна только для проверки типа, сделай из нее any - и проверяй на здоровье! А ещё мне очень понравились теги структур. Такие себе атрибуты в простом языке, для простых. Работать с которыми можно только в рантайме, а создать только при компиляции. Шикарный дизайн.
>>2671568 А зачем тебе собственно возвращать какие то там аргументы, почему так сложно сделать функцию которая не имеет в себе аргументов и ничего не возвращает? Это будет удобнее и понятнее лол
>>2671687 > А зачем тебе собственно возвращать какие то там аргументы Потому что я хочу сделать обёртку над уже имеющимися функциями, которые возвращают определённые значения. Более конкретно, я для себя пишу бек сервера, которые жсонки принимает и возвращает. Вот у меня есть такая функция для обработки конкретного запроса:
Она использует переменные, которые шарятся между другими подобными функциями, потому при вызове я хочу их лочить. Собственно SomeModel превратится лёгкой рукой в
Не очень понимаю, как здесь без возвращаемого значения. На ум приходит только так же переменную завести и потом на неё замыкать, а после выхода возвращать, но это получается не > удобнее и понятнее имхо.
>>2671692 Ну лично мне полезно было, пока пытался это запилить лучше прояснил для себя систему типов местную. Про ненужные абстракции согласен, но это игрушечный проект, а значит полная свобода для экспериментов.
>>2671696 Ни капли, классический mutex.lock() с анлоком выглядит куда чище лишних абстракций и усложнений кода, как и будет отсутствовать оверхед, но лучше всего использовать атомики и синк.мапы, если у тебя дело с переменными и их не слишком много
>>2671839 Попробуй сначала на ноде писать, на express. На ютубе миллион видосов обучающих как вебдрисню писать. Потом на голенге возьми ozzo-routing (очень похоже на express) и перепиши с ноды на гошку.
>>2671691 >Не очень понимаю, как здесь без возвращаемого значения. На ум приходит только так же переменную завести и потом на неё замыкать, а после выхода возвращать, но это получается не это классический паттерн. Once.Do тебе не возвращает ничего, errgroup.Go возвращает только ошибку, которая используется в самой логике errgroup и так далее. уже вангую варианты "для удобства" с двумя значениями, а еще значением и ошибкой
Зашёл в документацию gin, а там вместо документации какие-то рофельные странички из разряда: смотрите, наш фреймворк используют солидные челики. А где описание вашего фреймворка? Туторы?
Чет рил многовато нытиков стало. Какого хуя вкатунье и low level говно с других языков прется сюда? GO для сильных спецов на нем нет вкатунства. Пиздуйте в пхп и не возвращайтесь оттуда
>>2672505 У тебя талант выбирать неудачные решения. С сисярпом туговато в Рашке будет после ухода микрософта. Может и не будет но есть риск обосраться по итогу пытаясь вкатиться туда
>>2672505 Первым языком лучше питон или пыху или жаву брать. Байтоёбство в го/с/крестах/шарпах без дроча матанов в вузе == лютое падение мотивации от постоянных проблем с пониманием.
>>2672478 Сходил прочитал про дженерики. Ничего нового или хотя бы интересного - здесь можно, а здесь нельзя потому что убогий недоязычок не разрешает вам делать это
>>2672567 На шарпе крайне много вакансий в рф, на гошке считай их вообще нету, сравнивая с шарпом. Но на шарп если джуном идти, то там фуллстек в основном
>>2672663 >На шарпе крайне много вакансий в рф Повеселил. Там как с питоном если левый шлак отсеить который к твоей области деятельности отношения не имеет то остается не так уж и много
>на гошке считай их вообще нету Так гоха и не для тупых вкатунов, сто раз уже поясняли.
>>2672696 Заебал пиздеж про шарпы на дваче, особенно от вчерашних пхпшников Вот вакансии на шарп веб в москве с фильтром по названию: 461 вакансия «(C# or net) NOT unity NOT desktop NOT QA NOT xamarin NOT gamedev NOT wpf NOT winforms» Покажи сколько на го? Там половина выдачи будет яндекс.го и танцовщицы
>>2672711 Ты еблан тупорылый, даже чатгпт и то лучше контекст понимает чем ты. Мы не в вакууме сравниваем шарп и го а конкретно для дауна вкатуси выше. И в контексте этого что шарп что го неудачные выборы.
>>2672541 >А какое отноешние мелкософт в России имеет к рынку шарпа? Для шарпа есть две IDE и обе компании ушли. inb4: VS Code не IDE, там нехватает всяких ассистентов для ентерпрайз фигни
>>2672907 Пользуюсь Иде от второй компании, не знаю, куда и откуда они ушли, меня это не касается. ЧЯДНТ? А кабанчик могут и прдскочить с Корп. лицензиями.
>>2672932 >Пиратишь Да похуй. Я использую - возможность использования есть, и похуй кто там ушел кто нет. Может ещё и Винду не использовать? Я с виндо был когла мелкософта здесь ещё не было, я с ней и сейчас, когда мелкософта уже нет. И половина страны таких, ну кроме червей-зумеррв, конечно.
>>2673075 Чел, учи любой язык, хоть голанг. Перекатиться на другой потом будет очень легко. Работы для вкатунов действительно нет, ибо требуют хотя бы 2-3 года опыта в разработке на любом направлении.
>>2673075 Вкатуны нужны, только чтобы заплатить шекели барыгам со всяких манякурсов по пограмированию, больше они нахуй никому ненужны (тут гуглометы сокращают синьоров тысячами, а эти в го в рф без опыта собрались вкатываться, лол)
>>2673102 Тогда ищи по знакомствам. Вкатунов надо менторить жестко. Это на пыхе тебе добрый дяденька мидол будет полгода сопельки подтирать, а в гошке кровавый тырпрайс, там не до разжёвывания очевидных вещей.
>>2673075 А ты думаешь почему во всех рейтингах зарплат голанг в топе? Как раз из-за малого количества джунов с низкими зп.
>>2673102 Тяжело тебе будет вкатиться. Судя по твоим постам у тебя туго с восприятием инфы. Я сомневаюсь что даже в пхп сможешь вкатиться
>>2673122 Еще варик хорошего ментора за деньги найти. Некоторые даже реальные задания дадут со своей работы. Но сомневаюсь что у тутошных нищих вкатусь есть деньги
>>2672696 >Так гоха и не для тупых вкатунов, сто раз уже поясняли. Вообще-то для тупых, го создавался для дещевых индусов лол, которые способны чуть ли не копипастом ебашить микросевисы, над ними стоит погонщик поумнее, который будет их бить палкой по рукам, если что не так.
>>2673505 Задачи которые решаются на го не для новичков. Только дауны судят сложность работы по инструменту лол. Я за последний год кодил на расте, го и ноде. И задачи на ноде той же бывали сложнее чем на расте. А когда на с++ том же работал то кучу тупых вкатунов набирали несмотря на сложность самой сишки
>>2673586 Да да, чем меньше тупых вкатунов тем лучше. И слава богу что гоха на уровне вакансий уже их отсеивает. Так что вкатывайтесь, не стесняйтесь. Крылышки все равно обломают лол
>>2673723 Там только эйчарки, которым похуй на домашнее пиратство. На него всем похуй, всё равно почти весь доход с продажи лицензий идёт от организаций.
>>2673982 upd: я правильно понимаю что нужно сделать connect к слейвам вручную, а потом при операции "чтение" выдавать рандомный из коллекции конекшонов?
>>2673995 >upd: я правильно понимаю что нужно сделать connect к слейвам вручную, а потом при операции "чтение" выдавать рандомный из коллекции конекшонов? В целом - да. Два пула, один RW, второй RO. Вопрос как внутри балансировать, как простейший вариант round-robin сойдёт.
>>2674798 Я планировал написать бэк-сервис и фронт на шаблонизаторах, они общаются между собой через REST API и gRPC. Но потом мне сказали, что в голанг вкатунов не берут и я расстроился. Теперь думаю куда идти: в РНР или сишарп. Оба языка мне не нравятся. Первый переделали под джаву с корявыми инструментами. Второй загажен синтаксическим сахаром.
>>2674904 Если и возьмут то на общих основаниях. То есть никакого преиущества перед остальными вкатунами не будет. С пхп еще можно что-то как-то конвертировать.
Сделай без фронтенда. Пользователь загружает файл с кодом, выбирает компилятор, берет данные из файла инпут достает из файла аутпут. Ну или из сосноли, как ему больше нравится.
>>2674866 да там три <input> на страничке - два текста и кнопка. ну и один текст нужно будет научиться заполнять ответом от сервера. вот реально задача для стажера, чтобы он познакомился с фронтом минимально.
>>2674866 Мало что можно написать онли бекенд, можешь написать низкоуровневую хуйню, что бы просвапать регистры и заводить указатели на C функцию прямо из гошки (сейчас оно требует мост пастить, что дико неудобно)
Голангуны, в тысячный про вкат спрошу. С техническим бэкграундом в виде ковыряния железок на C, написания сетевых приложух на C++/Qt, создания небольших API-шек с БД (без всяких брокеров, редисов) на Python таки смешно вкатываться в Go и попустят, или опыт немного релевантен?
>>2675319 Опыт релевантен только коммерческий и только в компании, все остальное - никому не нужный мусор, тебя просто будет отсекать еще хрюши, а не техи
>>2675787 он добавит 3, но после второго апенда Копировать элементы слайса в другой слайс в Go просто, но это нужно делать с помощью встроенного copyили же appendфункции. Если вы просто присвоите существующий срез новой переменной, срез не будет дублироваться.
Обе переменные будут ссылаться на один и тот же слайс, поэтому любые изменения значения слайса будут отражены во всех его ссылках. Это также верно при передаче слайса в функцию, поскольку в Go слайсы передаются по ссылке. https://()freshman.tech/snippets/go/copy-slices/
>>2675787 он добавит 3, но после второго апенда Копировать элементы слайса в другой слайс в Go просто, но это нужно делать с помощью встроенного copyили же appendфункции. Если вы просто присвоите существующий срез новой переменной, срез не будет дублироваться.
Обе переменные будут ссылаться на один и тот же слайс, поэтому любые изменения значения слайса будут отражены во всех его ссылках. Это также верно при передаче слайса в функцию, поскольку в Go слайсы передаются по ссылке. https://()freshman.tech/snippets/go/copy-slices/
Братишки, как устанавливать пакеты в голанге, чтобы они были доступны для импорта хоть у чёрта на рогах? Например, я могу слелать import "fmt" в любом .go файле, а import "github.com/atotto/clipboard" уже требует какого-то нездорового пердольства go.mod. Как уравнять васянские пакеты с системными?
бля пхп макак на связи, решил пополнить стек еще и Go, сам бывший вкатун, уже месяцев 7 опыта. Скчал значит курс по GO, в ожидании что меня научат как можно интегрирывать Go с пыхой как json чики получать и отправлять и тд. по началу все было легко синтаксис и тп и тут началась лютая дрочь с математикой. Определите периметр/площадь/ решите ебаное уровнение, определить кол-во корней и тп. Неужели в GO нельзя быть крудошлепом и просто в распаралеливать запросики в БД.
Кстати когда начал вкатываться, мне посоветовали начать с питона. Начал тогда смотреть курс по питону на ютубе и когда началась подобная хуйня с математикой я дропнул т.к. не понял нахуя все это вообще нужно и занялся версткой.
>>2676521 Да я к этому готов, сейчас посмотрел вообще че за курс скачал, он вообще для студентов каких то. Чел рассказывает про условные конструкции, типы данных а задачки задает связанные с матаном. Я такое не вывезу. Буду искать что то чисто с web разаботкой на GO связанное.
>>2676506 Можно, конечно, просто ты взял какой-то курс от шизов, которые дрочат на базу и классический подход к обучению. Это почти то же, что в вузиках, когда не можешь сдать лабу по программированию, потому что не осилил какую-то залупу из математической физики, хотя само программирование знаешь лучше препода.
>>2676542 Это давняя проблема со многими курсами, тянется ещё из 80-х, когда это ещё имело смысл. Сейчас можно смело скипать подобное. Тысячи новичков вообще забросили программирование, потому что вместо самого программирования их пичкают ёбнутыми математическими задачками.
Возглавляется неким "Робом Пайком", который не знает: о существовании модели акторов с разделяемой памятью о динамической линковке об обобщенном программироние и о о функциях map, filter, reduce и вообще судю по убожеству первого пейпера (и это-то после 30 лет опыта в белл лабс!) выдал какой-то полуси с корутинами и в дизайне яп не особо рубит если бы не Дмитрий Вьюков, поднявший в свое время ГЦ голанга из той параши, где он находился, язык так и остался бы никому не нужным Хуеватая система импорта, зашивающая в имя пакета путь в рептозитории, а если надо обратиться к защищенной репе, то скреды прописать ЯВНО В СТРОКЕ ИМПОРТА ВНЕЗАПНО nil, переданный как значение в тип unterface{} перестает равнятся своему же значения Язык объективно хуевый, чего стоит одна система типов, требующая постоянных подсказок в виде явного объявления типа над функцией. Вывод типов? Ленивые вычисления? Автор так и остался в Bell Labs середины 70-х. Нет постоянного стандарта на язык, а только какие-то "отчеты". И многое другое!
>>2678408 Алсо нашел совершенно шикарную дискуссию на гитхабе. Типа, а давайте так сделаем? А ему в ответ - ничего мы делать не будем, потому что или нахуй. Как всё-таки ЭТО могло стать популярным?
>>2678416 >Типа, а давайте так сделаем? А ему в ответ - ничего мы делать не будем, потому что или нахуй. Все правильно сказал. Это совершенно минорная фича чтобы тратить на нее время. капча тоже намекает что тебе стоит пойти нахуй
Сап голангач. Имеется директория с файлами main.go (пик 1) и suite.go (пик 2). ChatGPT с VSCodом утверждают, что всё заебись, будет работать. При запуске выдаёт ошибки, представленные на пик 3. Что сделано не правильно? Как вынести определения функций за пределы main.go, оставив только вызовы?
Мягкие также продвигают свою ось, новый дотнет уже не дружит с 7, хотя поддержка только недавно прекратилась. Хотя сейчас это прям тренд, но раньше языки так быстро по ОС не скакали. Если ты веб макака, то пох, но если есть клиенты, то гемор. Нахера двигать свою ось через разработку, денег мало чтоль.
ООП говнище само по себе, усложнение на равном месте. Писать легко, сопровождать гемор.
Анальная привязка к IDE, так как из-за ооп хер разберешься что тысячи пустых классов делает и что подключать. А так как классов тысячи, нахвание у них на четверть экрана.
Таскать всюду вирт машину, если не тоскать получи под две сотни мб хеллоу ворд у которого будут все равно еще какие-то файлы помима экзешника, в общем, хер поймешь в общем.
Но у го ппц какой кривой дизайн языка, я бы лучше раста накатил.
>>2681344 Ппц тебя скрючело. Так то срать какой продукт что не поддерживает, хром монополист, может говнить себе в штаны, но вот эта тенденция языков, такого раньше (лет 10-15 назад) не было, чтоб в момент сразу все к херам бросать. Забавно что го все еще поддерживает 7.
Пацаны, я тут смотрел 10-летней давности проект на пыхе и меня вдруг осенило. https://github.com/ornicar/lichess-old Обратите внимание на файлы deps и deps.lock. Очевидно, что это разрабатывалось до появления композера. Ничего не напоминает? А что, если гошке не хватае НОРМАЛЬНОГО менеджера пакетов/зависимостей? Или текущее состояние вещей вам норм?
Кто нибудь в Go перекатывал с php? Че-то у меня не получается, очень редко на собесы зовут. Имею только 2 года опыта в резюме. Мб пририсовать еще годик полтора?
>>2682789 А ты уверен, что у тебя проблема в годах опыта, а не в том, как этот опыт описан? Если что «пук срень пыха ну так пук лара пастил» не подходит, тебе нужно во всех интимных деталях объяснять чем ты занимался, какие паттерны использовал, технологии (даже самые смешные и простые)
если там бинарник, то делаешь go install github.com/google/gopacket@latest если не бинарник, то тупо добавляешь его импортом в код и делаешь go mod tidy, он автоматом скачивается в кеш покетов
>>2683031 >чем ты занимался, какие паттерны использовал, технологии (даже самые смешные и простые) Пиздец ты жалкий кретин. Такую хуйню обычно говно из гнойный аутсорс-бодишопов пишет в своих сраных резюме
Всем привет. Есть несколько сервисов, штук 10. Все они ходят друг в друга. Как можно их красиво инициализировать? Например сервис A ходит в сервис B, а сервис B ходит в сервис A. Код писал не я, но мне к сожалению нужно его фиксить. Как можно это реализовать кроме как через публичные поля структуры?
>>2683515 инициализировать что? это сервисный слой в коде? ну самое простое это вместо походов друг в друга сделать чтобы они ходили в общую зависимость
Сап голангач. Есть два стула. Первый: забилдить фронтенд, бэк без апи, скомпилировать фронт + бэк в один бинарь. Второй: забилдить фронтенд, скомпилировать бэк с апи, фронт с бэком общаются через апи. На какой стул сейчас принято садиться в промышленной разработке?
>>2683894 Т.е. оба крутятся на локалхосте, но бэк там и остаётся, а к фронту можно стучаться из интернетов через реверс проксю? Первый стул считается эталонным говнокодом или допустим в отдельных случаях?
>>2683903 Хост не обязательно один и тот же, это смотря как построить инфраструктуру. Бэк в любом случае будет доступен из интернета в обход фронта, какими проксями ни обмазывайся, фронт же должен их как-то дёргать с машины пользователя. Первый стул сам по себе не говнокод, просто инфраструктура будет менее гибкой, но это не всегда критично.
>>2683930 >>2683917 Спасибо за ответы. Сам на второй сяду, заказчика на колени посажу. Первый для петов оставлю. Больно уж его просто деплоить на своём сервере.
>>2683801 > как же блядь это странно и не интуитивно понятно. Что в этом непонятно? Разве так сложно понять, что интерфейс в твоем случае означает просто условие, что передаваемый тип должен иметь эти функции, ВСЕ Дай угадаю, питон-макака? Только там настолько тупые могут быть
>>2683386 Ну кто то жалкий, а кто то просто ищет работу. Как бы тебе не нравилось, но это суровая реальность, к которой тебе придется привыкать и изучать, ибо на собесах как раз и спрашивают про них
Столкнулся с ложным сообщением об ошибках импорта в VSCode. У меня есть общая директория, которая содержит вложенные директории с проектами. Когда открываю отдельно какую-то вложенную, то всё в порядке. Когда открываю общую директорию, то в каждом из проектов возникает пикрил сообщение, при этом код работает исправно. Как можно это пофиксить? Иногда цепляю шаблоны из других проектов, а эта ошибка мешает.
>>2684214 Добавил "go.gopath": "C:\\Users\\Dvach\\go\\pkg\\mod". Нахуя это гошное расширение впихивает src в путь? Модули же лежат в C:\Users\Dvach\go\pkg\mod
>>2684214 >. У меня есть общая директория, которая содержит вложенные директории с проектами гоплс издавна не мог работать с проектами где несколько go.mod в разных папках. для этого https://go.dev/doc/tutorial/workspaces добавляли
>>2684304 Благодарю, работает. А нельзя как-то изменить $GOPATH/src на $GOPATH/pkg/mod? В \.vscode-oss\extensions\golang.go-0.38.0\dist\debugAdapter.js об этом что-то есть, но я не шарю в JS:
/ Given a remotePath, check whether the file path exists in $GOPATH. This can be either in $GOPATH/pkg/mod or $GOPATH/src. If so, return that path. remotePath can be something like /usr/local/gopath/src/hello-world/main.go and relativeRemotePath should be hello-world/main.go. In other words, relativeRemotePath is a relative version of remotePath starting from the import path of the module. */
>>2665435 (OP) Платиновый вопрос - с нуля стоит вкатываться в голанг разработку? Хочу грузить жсоны. Вышки нет, так что вариант со стажировками в МЯСКОТЕ не подходит
>>2684233 Отсутствием. Да, правда. Они гордятся всем, его у них нет. Вот дженерики теперь есть, и казалось бы, зрада зрадой, но есть повод для перемоги - нельзя вырабить обобщённый метод, неользя тип с констрейнтом мспольовать иначе, как в заголовке.
Джва вопроса Почему в языке, который расчитан на быстроту выполнения нет различных флагов оптимизации в ущерб скорости компиляции, как в других ЯПах? Почему нет настроек гц уровня жабы и создатели сами решают это заместо тебя? Понятно, что язык создавался что бы быть простым как палка, но погромисты не дауны же.
>>2684707 Потому что еще одна цель языка - унификация. Это видно даже по тому, как он инфорсит стиль написания кода. В идеале одну и ту же задачу на Go можно решить одним способом и код при этом будет получаться максимально похожим, начиная с форматирования и заканчивая логикой. Всякие флаги добавляют непредсказуемости и возможностей накосячить. Ты правильно заметил, что существуют другие языки, где эти возможности реализованы.
>>2683055 Я ж написал, что go get и go install не работают с этим пакетом.
>делаешь go mod tidy
У меня есть куча учебных однофайловых программ, которые требуют github.com/google/gopacket Это ж придётся каждый раз go mod tidy вводить, почему так геморно сделано? Неужели нельзя один раз установить зависимость и при компиляции новых программ она будет автоматически обнаруживаться сборщиком?
>он автоматом скачивается в кеш покетов
А почему гошный сборщик в кэш не смотрит при последующих сборках? В чем смысл этого кэша, если сборщик не может найти уже "закэшированный" gopacket? Зачем на каждую однофайловую прогу вводить go mod tidy, пересоздавая кэш? Даже в устаревшем Си сделано более человечно, когда "кэш" автоматом ищется в стандартных директориях.
Есть один сторонний пакет, импортировал его по URL (github.com/...) и в процессе выяснил, что некоторые функции там не реализованы, не долго думая я начал просто локально править исходники. Все работает, но как правильно теперь завендорить данную библиотеку или как это назвать, короче чтобы был пакет с моими правками и плюс вопрос, если сделать например go get -u all или еще какую-нибудь подобную команду, мои изменения пропадут и пакет опять подтянется с гитхаба? Если честно, впервые в такой ситуации.
>>2685104 Буквально всегда, например при открытии файла, что бы можно было везде ретурнов совать и не бояться, что где то можешь забыть хендл прикрыть, применений уйма
Решил по накурке почекать гошечку вашу. Смешной язык, синтаксис вообще улет, несколько возвращаемых значений это сильно. Ну че рассказывайте как вам на нем работается?
>>2685159 >несколько возвращаемых значений это сильно Сильнее чем ты думаешь. Их не несколько, а одно множественное. Это такой неявный кортеж. В случаях, когда длина кортежа равна количеству пара Петров функции, можно этот кортеж передать в функцию. Или присвоить списку переменных, опять же, только такой длины.
>>2665435 (OP) Аноны, а какие проблемы закрывают облака? У меня есть монолит на Го, покрыт тестами и в целом все вынесено по слоям, деплоюсь на вдске в докере, сам монолит + инфра, рпс маленький, это скорее сервис для небольшого количества людей, а написан на го, потому что приятно писать.
Все вроде норм, но дай думаю попробую себя в найме. собесился сразу на мидла, начали спрашивать за гугл клауд, я сказал что не знаю, он мне не был нужен, никаких моих проблем он не решал. Собственно, а какие проблемы он решает для небольших компаний ? Целюсь в именно такие, с штатом до 50 человек(но вообще таких очень мало хех)
ПЕРЕКАТЫВАЕШЬСЯ В ГОШКУ ПО МАНЯ ГАЙДАМ ОТ ИНДУСОВ @ ПРЕДВКУШАЕШЬ ОХУЕННЫЙ, МИНИМАЛИСТИЧНЫЙ КОД @ ВЗЯЛИ НА ГОШНУЮ ГАЛЕРУ @ ПИКРИЛ @ ОБТЕКАЕШЬ @ СОБЕСИШЬСЯ НА ПРЕЖНЕЕ МЕСТО
У вас там когда планируют внедрить нормальную обработку исключений?
>>2685564 Serverless, деплой кучи микросервисов, только хуй знает почему это спрашивают у тебя, если ты я так понимаю не на девопса пошел, но тут думаю из за размеров команды им нужен человек-мультитул
>>2685641 Возможно ты прав, но это единственный собес за месяц, с работкой грустно, поэтому каждый провал довольно значителен в общем, было б это собес 1 раз в неделю то пох
>>2685564 1. Маштабируемость: если у твоего приложения будет резкий рост нагрузки, можно достаточно легко иногда даже автоматически увеличить количество нод, дать больше памяти/процессора, БД, очередей. 2. Все необходимое есть из коробки: базы, очереди, кеши, мониторинг, логи, фаерволы, защита от DDoS, хранение секретов. И все это хорошо интегрировано, если следовать рекомендуемому пути все будет работать отлично.
Взамен ты получаешь конские цены, когда у приложения нагрузка вырастает до больших значений. И очень часто - вендор лок.
>>2686089 Это же насколько нужно быть тупым, что бы не понять этого? Твой стд бинд просто возвращает враппер, где строго говоря какие то аргументы уже забинжены и тебе не нужно их юзать, closures в go, как ты их называешь, это просто вызов функции, которая возвращает тебе функцию, внутри которой есть переменные из первого вызова
>>2686907 Работу никто не предлагает, сижу в гэпе пока. Просто весь опыт джавы это круды на спринге + кубер. Про инструмент - золотые слова, но вот хотелось бы подтянуть фундаменталс с чистого листа на новом стеке. >>2686935 Кажется джава очень громоздка в плане инфраструктуры, хочется просто кодить и решать кодерские задачки, а не пердолиться с зависимостями, фреймворками, сборщиками и т.д. Ну и 90% задач - круды шаблонные.
>>2689004 Как правило err != nil, потому что за этим обычно следует вывод ошибки в лог и ретурн/передача управления в другую функцию. В противном случае будут появляться else, вложенные ифы или просто вся логика будет внутри большого ифа. это если вопрос был серьезный, а не насмешка над типичным гошным бойлерплейтом
Просто скопировал свою же прогу с одного компа на другой и при go get all получаю кучу таких сообщений >go: all: malformed module path "sync/atomic": missing dot in first path element (для всех зависимостей)
Вообще чет сильно испоганили работу с зависимостями, в 2017 такого не было, можно было просто кодить, сейчас какой-то пиздец. Естественно в go.mod я добавил путь с гитхабом.
>>2689213 Мне вообще люто доставляет подход к ошибкам в гошечке, после питухона, когда любая внешняя хуйня может выкинуть исключение и ты узнаешь что она выкидывает исключения только когда это случится или проштудировав код/документацию. Охуенная идея насильно заставить обрабатывать все ошибки и похуй на пару дополнительных строчек кода.
>>2686888 Гошка простая, нет никакого смысла идти в джуны, если есть опыт программирования уже. С джавы однозначно да. Сама по себе жаба неплохой язык, но те подходы и инструменты, которые популярны в ее сообществе - делают разработку на жабе полнейшим говном. Причем нелепым и кринжовым прям, если у тебя есть опыт в других экосистемах. Да и сами адепты джавы, зачастую, довольно туповатые и ограниченные, особенно спринганы. Мимо 12 лет в ИТ, рулил проектами на nodejs, go, java/spring, python
>>2690223 Какие мантры? Гошка очень топорная и простетская, это и была одна из целей создания. Scala, Idris, Rust, F# да дохера их. И C# ровно в 2000-м.
>>2689524 Так панику в го у тебя никто не отменял, плюс этих "дополнительных строчек" настолько много, что ты далеко не всегда можешь сказать какие ошибки вернёт твоя функция.
>>2690583 Там она может сама случиться, хочешь ли этого ты или автор внешней либы, банальный доступ по несуществующему индексу. >когда любая внешняя хуйня может выкинуть исключение и ты узнаешь что она выкидывает исключения только когда это случится или проштудировав код/документацию По этому кейсу, ты все равно должен штудировать сорцы/документацию, что бы знать какой из сотни видов ошибок у тебя прокинется выше и навесить на его обработку какую-то логику.
>>2690586 > что бы знать какой из сотни видов ошибок у тебя прокинется выше и навесить на его обработку какую-то логику. Ты же понимаешь что в 98% случаев тебе не нужно по особенному обрабатывать каждую ошибку? Максимум - выкинуть 500 статус код и в боди саму ошибку
>>2690592 >Максимум - выкинуть 500 статус код и в боди саму ошибку Если у тебя такая обработка ошибок, то в случае с try catch никакой проблемы тоже нет, оборачиваешь реквест в него, пользователю 500, в логи стектрейс.
>Если у тебя есть такая проблема, то тебе ни один язык не поможет, ты везде будешь тупым А ты уже проштудировал сорцы внешних либ и убедился, что такого точно не будет блябуду?
>>2690610 Паника это любая необрабатываемая ошибка, которая может случиться во время выполнения программы, что бы ее получить не обязательно, что бы ее кто-то явно кидал.
>>2690632 Тут дело в значимости, авторы gin понимают, что паника может случиться где угодно и спокойно юзают recover, а неофиты начали вторить евангелистам и объявили весьма полезную функциональность антипаттерном
>>2690352 Попробуй отведать ради интереса систему типов из f#, а лучше из ocaml с его алгебраическими типами, Polymorphic variants и.т.д. Потом больше ничего не захочешь.
>>2690608 >Есть аналог твоего try/catch, recovery() зовется, но это ебейший антипаттерн А нахуй тогда это есть в языке, если это такой пиздецкий антипатерн? Он же вроде простой и в нём нет ничего лишнего.
>>2690778 Та не... гошка довольно касая, топорная, а местами откровенно всратая. Просто менйстрим и промышленное разработка, скажем так, это про выбор меньшего из зол и уворачивания от костылей, который летят тебе в лоб, от создателей различных инструментов. Просто исторически сложилось, что простой, производительный зяык, с грин-тредами и CSP - это го, лучше пока ничего нет.
на самом деле crystal (https://crystal-lang.org/) куда лучше и органичнее, как язык. но оно нихуя не популярно и имеет беды с кросс-копиляцией
>>2689524 В Go есть panic. Просто преобладает подход с возвратом (недо-)тьюплов и язык старается уйти от исключений. >>2690583 Паника - это вполне нормальное поведение в определенных ситуациях, когда ошибка настолько серьезная, что выполнение продолжать не нужно или просто невозможно.
хз ру на запрос "golang" выдает тысячу ваканский. На запрос "go" 6к вакансий. При том что по запросу Java выходит всего 3к. Так 1к или 6к более правдиво?
Допустим есть две структуры A и B, (определенные во внешней библиотеке), обе имеют одно и то же экспортируемое поле Foo string и при этом не находятся в отношении наследования. Как (и можно ли вообще) на го написать функцию, которая будет принимать в качестве параметра переменную типа A или B и выполнять операции над значением поля Foo независимо от типа структуры и чтобы написать метод один раз, а не для каждого типа отдельно?
>>2693009 И что? Ты к тому, что роллбек надо делать сейчас, а не выше? Ну сделай, и выбрось с чистой совестью панику, здесь делать больше нечего, и в пределах 3х уровней выше тоже скорее всего нечего.
Кто шарит за планировщик в последних версиях go? На сколько я знаю с 1.18(вроде) гарантируется, что ни одна горутина не будет занимать системный поток бесконечно. В случае, когда есть свободные потоки, я понимаю как они могут прервать выполнение другой горутины. Но если все потоки будут заняты и не будут совершать действий вызывающие планировщик, что происходит в этом случае?
Документация во всём стеке голанга это пиздец конечно. Фактически отсутствует, что приводит к необходимости лазить по сорцам и вдуплять смысл каждой фичи. Если бы не перекатывался с жабы, имея за плечами солидный опыт работы с гнилой легасью, уже забил бы на изучение.
>>2695260 >документации во всем стеке Это какой? Который буквально пару роутеров имеющие в себе полторы функции и грпц в котором тоже пару функций, и те генерируются сами?
>>2694516 Спасибо, Анон. Наверное очевидно, но я не рефлексировал, пока ChatGpt не сгенерировал такой код и возможно детская травма от чтения книжек по borland c
>>2695150 >В случае, когда есть свободные потоки, я понимаю как они могут прервать выполнение другой горутины. Но если все потоки будут заняты и не будут совершать действий вызывающие планировщик, что происходит в этом случае? отправкой сигнала занимается sysmon тред, а не треды, которые твои горутины с твоим кодом крутят
>>2695498 Допустимо-ли клепать приложения без применения подкаталогов с другими пакетами? Т.е. раскидать код на несколько файлов в одном каталоге, относящихся к package main. Вижу некоторую трудность в выяснении источника функции, т.к. в едином пакете нет вызова типа: hui.Droch(), а сразу Droch() непонятно откуда. Насколько это будет/не будет считаться говнокодом? Мне не нравится куча подкаталогов, которые надо раскрывать.
>>2696453 Да, конечно, многие крупные и уважаемые проекты так и склепаны. Sarama, например. В любом случае код на го не может быть нормально организован из-за предельно всратой системы модулей и управления зависмостями. Поэтому просто пиши как тебе меньше страдается.
>>2696453 >Вижу некоторую трудность в выяснении источника функции, т.к. в едином пакете нет вызова типа: hui.Droch(), а сразу Droch() непонятно откуда из того же пакета main, понятно же >Допустимо-ли клепать приложения без применения подкаталогов с другими пакетами ну допустимо. но это зависит от объема и обычно так не принято. на практике ты можешь притвориться сишником и писать префиксы без точки у каждой функции/типа, но тебя захуесосят. мне как стажеру в первый день говорили вот если хочеш напиши сначала в одном пакете, потом разобьеш)))))))))))))
>>2696657 >C IDE оно конечно понятно через ctrl, а в иных ситуациях придётся кучу файлов пакета в поисках дрочи перерыть. да ладно тебе слыш, у тебя один пакет, в котором может может быть одна функция с таким названием, оверлодинга же нет
>>2697208 Ничего против вима не имею, но что именно он умеет, чего не умеет вскод а то может стоит изучить. По факту 99% того, что мне требуется - это ctrl+click и переименование символов по f2, но то я. Интересно, какие еще есть реально полезные фишки.
>>2697208 > IDE денег стоит и в рашке не продаются. Ну, давай разберём по пунктам тобою написанное. 1. "Денег стоит". То есть ты, высококвалифицированный айти-специалист, не можешь заработать себе на инструмент? 2. "Не продаётся в РФ". Читать как "я, высококвалифицированный айти-специалист, настолько туп, что не могу осилить обход формальных ограничений".
>>2697272 Стоит как минимум попробовать vim-mode, вроде как для вскода он был. Основная фишка как бы в этом. Как редактор вим изкоробки не умеет ничего. Есть есть желание подучить lua, и пару тройку вечеров чтобы сделать себе конфиг то вперед. Однако поебавшись и настроив все мы получаем редактор уровня vscode с консольным ui. В конечно счете за несколько лет использования ты настолько сильно врастаешь в этот вим, что его хочется буквально везде, и любое редактирование текста ты себе иначе уже не видишь. Что касательно пользы то как бы удивительно это не звучало то это экономия время не редактирование текста. Да, ты тратишь время на конфиг, но компенсируешь его когда освоишь редактор хотя бы через месяц-два использования. Кроме того вим не вешает 32гб машину с запущенными фоном 8-ю gopls, докерами и прочей хуетой.
>>2697208 >>2697367 Использование IDE для го в принципе никак не обоснованно. Кроме, разве что, фантазий про серьезных программистов купивших себе goland. Скажу больше, если забрать у тебя все эти удобные кнопки которые тебе дает IDE, и без которых ты ничего не можешь, то грош тебе цена как программисту. Не можешь сам автоматизировать и настроить свое рабочее окружение - идешь нахуй, ты не программист.
>>2697395 Это некоем образом не причина использовать IDE, это может быть поводом но никак не причиной. Тем более говорить что только тру программисты выбирают IDE. Иш какой сурьезный, сидит там в IDE. У тебя риторика уровня, не хочу ебаться с настройкой потому что я дохуя занятой. При этом проебывая время в треде и споря с каком-то рандомным челом. Настроить можно все что угодно и как угодно. И код ты можешь писать где хочешь. Ничто из этого не делает тебя программистом лучше или хуже. Поэтому заканчивай свою хуйню с вешанием ярлыков. Есть у меня работа, и вим мне в ней очень помогает.
>>2697409 Сразу отвечу, что и в моем понимании человек использующий vim никоем образом программистом лучше вас сидящих в IDE не является. Я говорил только о знаниях и возможностях, и наверное даже скорее понимании того как настроить своей рабочее окружение. Если ты не можешь сделать этого сам, то ты не понимаешь как это работает. А значит что ты макака которую можно легко заменить такой же макакой которая будет нажимать удобные кнопки в IDE и рассказывать про трушность и серьезность программистов.
>>2697411 >sudo apt install vim >ДА НИ МАКАКА Я НИ МАКАКА ЭТО ВЫ МАКАКИ ЗАПУСТИЛИ СВОИ ВСЯКИЕ .EXE .DMG
>конфигурация посредством редактирования .yaml / .lua / whatever else > VS конфигурация нормальным UI и плагинами в одну кнопку с маркетплайся >РЯЯЯЯЯ МАКАКИ КНОПКОДАВЫ НИЧЕГО НЕ СТОИТЕ РЯЯЯЯЯ ВИМ СЛОЖНАААА
>>2697411 >Если ты не можешь сделать этого сам, то ты не понимаешь как это работает Может еще свой менеджер тредов, процессов и памяти написать? А то хули, как ты им пользуешься сам не реализовывал.
>>2697418 Ты бросаешься из крайностей в крайности. Если тебе нужно понимать как работают эти вещи в твоей рабочей повседневной деятельности, то да, это хороший способ понять что это такое. Квинтэссенция программирование про автоматизацию процесса, в данном случае разработки.
>>2697419 >Квинтэссенция программирование про автоматизацию процесса, в данном случае разработки Программирование это про перевод бизнес-требований или личных хотелок в код, а не твоя шиза про настоящих программистов.
>>2697419 > Ты бросаешься из крайностей в крайности. Так а нахуя мне тогда понимать как работает ебанная IDE? И самое главное не нахуя, а ЧТО ПОНИМАТЬ, что ты в ней собрался понимать? Вот скажи блять, ЧТО В НЕЙ ПОНИМАТЬ
Я понимаю как работает язык и нужные мне библиотеки. НО ЧТО Я БЛЯТЬ ДОЛЖЕН ПОНИМАТЬ В ЕБАННОМ РЕДАКТОРЕ, ЧТО БУКОВКИ ВСТАВЛЯЮТСЯ ПРИ НАЖАТИИ?
>>2697427 > поди ещё и на винде сидишь Предпочитаю пользоваться удобной системой без проблем, а что? В разработке она не нужна, голенг умеет в кроссплатформу
>>2697424 Это и есть автоматизация. Берешь идею - автоматизируешь процесс. >>2697425 Ты несколько уводишь наш разговор от темы. Я говорил не об этом и имел ввиду совсем не это. Ты, или это был не ты, неважно. Тот анон что выше, его основная логика, что все крутые и серьезные программисты используют IDE. Моя же логика не в том, что все программисты использующие vim по настоящему крутые и куда лучше вас бездарей из IDE. Моя логика что если ты вешаешь ярлыки по тому что использует человек, при этом сам не вдаешься в технические вопросы того что ты повседневно делаешь, то ты просто долбаеб, вот и все.
>>2697432 >Это и есть автоматизация. Берешь идею - автоматизируешь процесс. Если это лично тебе нравится или это требования работадателя, то да. Если нет, то это не стоит твоего времени.
>>2698178 Дебаггер тебе я так понял нинужын. Смысл в идее и ее потомках - то что там нормально сделан дебаг для любого официально поддерживаемого языка.
>>2698368 Когда начал учить го, потратил минут 30 чтобы установить vim-go. Было безумно сложно дописать в конфиг пару строк, но я каким-то чудом справился.
Почему так сложно форкнуть библиотеку и использовать ее? Камитишь блять пушишь и все равно, твои изменения не видны, несмотря на то что ты импортируешь библиотеку уже из своего репозитория. Версии какие-то, ну нахуй это надо, почему нельзя просто брать последнюю версию из мастер бранча?
Прошел го тур, думаю порешать задачки с литкода на го и написать простенький проект. Какую ide можете посоветуете? vim только начал осваивать, сам привык к intelli j, но платной подписки нет.
>>2698612 Если торопишься - vscode или его открытый форк. Не ебись с вимом, учи язык. Потом когда будешь синьером-помидором хуи пинать, можно и вим позадрачивать.
Если по фану - то конечно neovim, сначала будет непривычно, потом сложно, но в какой-то момент ты поймешь, что получил охуенный инструмент, которым будешь пользоваться всю жизнь.
Попробую спросить. Имеется логгер github.com/sirupsen/logrus. Имеется gin.Recovery(). В режиме logrus.WarnLevel, логгер корректно пишет всю инфу об ошибке, но с пометкой паники как: level=warning. В режиме logrus.PanicLevel логгер перехватывает любую панику в фреймворке, вываливает только инфу о том, что была panic и я прекратил работу программы. Логи самого фреймворка при этом теряются. Может кто-нибудь с этим логгером работал и знает, как обрубить ему возможность вызова паники, чтобы он только логи писал и не выёбывался?
>>2698585 > Версии какие-то, ну нахуй это надо, почему нельзя просто брать последнюю версию из мастер бранча? Представь, как тысячи проектов одновременно перестали собираться из-за того, что в последней версии популярной либы сломали обратную совместимость.
>>2698585 Да меня тоже все это бесит, но без этого никак. Git нужно изучать в обязательном порядке, без него уже хелло вёрлд наверное ни на одном языке не написать, кроме QBasic. Все это сделано максимально неудобно, но если разобраться, то понимаешь, почему без этого какая-то серьезная разработка невозможна. Зато вот разберешься с goreleaser и будет у тебя страница с релизами как у взрослых проектов :)
>>2699511 > Все это сделано максимально неудобно git commit команду наверное пиздец сложно выучить. Удобнее ничего нету, почему тебе неудобно - хуй знает. Оно сейчас идеально и максимально удобно, можешь хоть по-коммитно подгружать нужную версию и не ебать мозгу
Насколько сложно в вас вкатываться? За спиной только питон в адекватном объёме джун+/миддл- и соответствующие бековые приколы - БД, очереди, сисд, докер, кубер.
>>2706194 >А умом ты не блещешь, да? я из джавы к вам пришел, там обмазываться книжечками это норма. У вас че, не так что ли?
Я открыл эту ссылку на туториал, но мне кажется этого мало для понимания полноценного.
>>2706246 хеад ферст сразу нахуй, я их книги не рассматриваю в принципе ни в каком языке - технологии.
нашел какую-то нашел какую-то Адам Фриман Профессиональный Go. Вроде объем неплохой, пока читаю но складывается впечатление что писал инфобизнесмен какой-то ебаный.
>>2705938 Если у тебя норм опыт в джаве, то достаточно пробежать по материалам в шапке. Потом практика и гугли/читай доки по сложным для тебя моментам. Талмуты на 1000 страниц тут нахуй не нужны, гошечка мега простая, когда есть опыт.
>>2707323 производственного опыта нет, спринг потыкал, петпроектики немного, алгоритмы там и все такое. Ну естессно задрачивал талмуды про одно и тоже
пока смущают немного срезы. Нахуя навыдумывали какую-то хуйню с привязкой к массивам, ебота какая-то (я конешн понимаю что из под капота в джаве динамические коллекции тоже работают (некоторые, не все) с массивами, но это как-то перебор), а так же из коробки передача по значению абсолютно всего нахуй.
Пока-что по ощущению это анти-джава какая-то получается.
Фух. Завершил свой первый бэк на гошке. Всё по высшему классу с тестами, логами, секурностью. Ощущения агонь в жопе. Такого количества шишек на петьке я не собирал никогда. Совершенно ебанутый синтаксис, рвотный верблюд принудительно, доки посредством экстрасенсорики, нажористые бойлерпринты и, вишенкой на кале, устаревание кучи васянских пакетов из-за сверхсветового темпа развития языка.
>>2707459 Го сильно низкоуровневый по сравнению с джавой. Это скорее хипстерский Си, в котором улучшили качество жизни и отобрали возможность стрелять себе по ногам. Все максимально топорно и просто, никакой магии. Cлайс - фактически тот же динамический массив из джава.
В джаве тоже абсолютно все передается по значению, как и в го. Вот только в некоторых случаях переменные под капотом содержат указатели на значения, а не сами значения. В го со слайсами такая же история, слайс - это по сути указатель на массив и когда ты передаешь слайс в функцию, ты по сути передаешь указатель. Если же тебе в го надо передать структуру, которую ты хочешь там поменять, нужно явно указать, что ты передаешь именно указатель на структуру, а не копию
>>2707562 Потому что ты скорее всего джавист, тут другая парадигма, синтаксис заебись, if err != nil тоже нормальный, что тебе не нравится? Удобные функции, интерфейсы и вообще подход. Заебись.
То, что заставляют на каждый пук писать доку это как плюс, так и минус, как смотреть. Но вроде бы это отключается
Язык охуенный, жаль, я не сениор и работу на нем не могу в польше найти. Если у вас есть вакансия на Go , готов работать вместо тебя, лишь бы не на жабе и прочем дерьмо ООП
Читаю спеку Го, никак не могупонять этот абзац про массивы: "An array type T may not have an element of type T, or of a type containing T as a component, directly or indirectly, if those containing types are only array or struct types." // invalid array types type ( T1 [10]T1 // element type of T1 is T1 T2 [10]struct{ f T2 } // T2 contains T2 as component of a struct T3 [10]T4 // T3 contains T3 as component of a struct in T4 T4 struct{ f T3 } // T4 contains T4 as component of array T3 in a struct )
// valid array types type ( T5 [10]T5 // T5 contains T5 as component of a pointer T6 [10]func() T6 // T6 contains T6 as component of a function type T7 [10]struct{ f []T7 } // T7 contains T7 as component of a slice in a struct )
Что здесь вообще подразумевается? >An array type T may not have an element of type T Или как в реальном коде можно записать такой тип T5 [10]T5?
>>2708859 Сейчас с джунами в целом неоче. Если у тебя нет опыта в айтишечке, я бы на твоем месте поискал вакансию линейного сотрудника в крупную средне-контору в эксплуатацию или админить тестовые стенды например, либо автотестирование. Пару лет там, параллельно практикуя го и осваивая все сопутствующее беку. Потом в разы проще будет найти нормальную работу. Можно будет перекатиться или сразу в разработку или к девопсам на пару лет еще пойти и оттуда уже в разрабы-мидлы точно заскочишь.
>>2708384 >// invalid array types рекурсивные типы. аналогично тому, как структ типа T не может иметь внутри член с типом T, только член-поинтер на T. >T1 [10]T1 // element type of T1 is T1 нельзя сделать тип, который является массивом самого себя >T2 [10]struct{ f T2 } // T2 contains T2 as component of a struct нельзя сделать тип-массив, элемент которого содержит в себе сам этот тип-массив >T3 [10]T4 // T3 contains T3 as component of a struct in T4 >T4 struct{ f T3 } // T4 contains T4 as component of array T3 in a struct аналогично предыдущему, только Т4 теперь не литерал, а именнованный тип
>>2708136 >Потому что ты скорее всего джавист, тут другая парадигма, синтаксис заебись, if err != nil тоже нормальный, что тебе не нравится? То что в 99% случаев err просто возвращается наверх. Но ты вынужден пердолиться с возвратом этого значения вручную. Например есть функция которая получает запрос, валидирует его, процессит и сохраняет в базу.
На Джава Response process(Request r) { validate(r); var response = processR(r); save(response); return response; }
На Го func process(r Request) (Response, err) { err := validate(r) if err != nil { return nil, err } response, err := processR(r) if err != nil { return nil, err } err = save(r) if err != nil { return nil, err } return response, nil }
Я понимаю почему это сделали, если у тебя функции не раскрашены, то сделать так чтобы эксепшен не пропал, а был правильно обработан, становится очень нетривиальной задачей. Но это сильно засирает обычный код. А все горутины остаются в фреймворке. В результате ты пишешь без горотин, но с if err != nil {
>>2709825 >по коду не понятно какие из функций проникнут эксепшном в жопу. весь код теперь в try catch оборачивать что ли? Технически у тебя любая функция может сломаться на null/nil и тысяче других вещей. Только в Java у тебя будет NPE который поймает фреймворк наверху, а в Go panic.
>>2709867 Это троллинг тупостью, да? Первый пост как раз и и был про If err != nil Плюс, чтобы вернуть err в случае nil ссылки надо не забыть её проверить на nil, без этого будет паника.
>>2710767 Пиздуй курой в самокат, у тебя 0 шансов, если нет айти вышки и предыдущего опыта. Если есть, то целый 1%, если ты умный дохуя, в чем я сильно сомневаюсь. Рынок сейчас перенасыщен пидорнутыми джунами с уже существующим коммерческим опытом, а в голанге джуны не нужны в природе.
>>2710277 > Плюс, чтобы вернуть err в случае nil ссылки надо не забыть её проверить на nil, без этого будет паника. Ты троллишь тупостью или как? Функция, которая возвращает саму эту ссылку тебе вернет еще и еррор, если у нее где то там внутри случился проеб, это не тебе надо проверять указатель на существование
>>2710767 Современная разработка это не про то, что ты знаешь как писать if-else-for и даже отличаешь класс от метода. Тебе нужно знать еще десяток-другой обязательных сопутствующих технологий и инструментов (гит, линупс, хттп, жесон, ямл, шифрование, бд, тестирование и еще куча всякой мелочи) и быть готовым разобраться с еще десятком специфичных для компании. Добавь сверху еще хотя бы поверхностное знание технологии разработки, гитфлоу, аджаил вот это вот все + знание типовых паттернов разработки и архитектуры, чистый код и прочую хуйню. Это для джуна. Для мидла надо уметь всем этим пользоваться хотя бы на уровне погуглил и за 5-10 минут сам понял как правильно и хорошо сделать. Язык за пять недель - это ок, но все это говно вокруг языка вытянуть самому за месяц-два очень маловероятно. Как выше писали, надрочить линукс и поискать работу рядовым дежурным сисадмином - шансов на несколько порядков больше.
>>2710961 >Функция, которая возвращает саму эту ссылку тебе вернет еще и еррор, если у нее где то там внутри случился проеб, это не тебе надо проверять указатель на существование Сам придумал какую-то хрень, сам на неё ответил. Речь шла о том что в функцию попадает nil значение которое раньше всегда было not nil. Вот тут и может быть паника.
>>2711586 Каким хуем туда попадёт нил значение? Если ты ошибки игнорить будешь, то так то да, но иначе я представить не могу как можно передать блять нил, что у тебя должно быть в голове? Сделать &var и получить нил ну уж точно не выйдет
>>2711162 Не перегибай, для джуниора как раз достаточно знать язык, включаю стандартную библиотеку, уметь мерджить ветки в гите и писать запросики к бд + хоть какой-нибудь кругозор. Все остальное специфично для конкретного проекта. Насчет общих знаний по паттернам и архитектуре - для этого есть мидлы и сеньоры. Другой вопрос, что компаний готовых растить нулевых джунов не так много, поэтому спрос на мидлов естественно больше. Челику можнт быть имеет смысл вкатываться на оплачиваемые стажировки в крупные компании, если не тупой, то предложат джуном поработать.
>>2712142 > Другой вопрос, что компаний готовых растить нулевых джунов не так много Согласился бы с тобой года два назад. Но за последний год каждая компания, которую я знаю разумеется включая мою посокращала кучу людей и разумеется это были в первую очередь джуны. Если я буду рассматривать себе в команду пополнение, в первую очередь я возьму джуна с уже существующим коммерческим опытом, а не вчерашнего студента (ну разве что он будет готов работать за дошираки). Благо сейчас есть из чего выбирать. Программы стажировок - отличная тема, сам так вкатывался, но опять же это было бля давно, задолго до СВО.
>>2713640 Первый же коммент >Every goroutine starts with 2KiB of pre-allocated stack, so one million goroutines consume around 2GB (2,048 * 1,000,000 bytes).
Можете пояснить смысл тезиса - объявлять интерфейсы там, где собираешься их использовать? Если я разрабатываю некоторый модуль и выставляю его api через интерфейсы, а реализацию скрываю в кишочках модуля, его могут использовать клиенты? Как в этом случае они будут получать конкретную реализацию?
>>2714644 Спасибо, еще вопрос появился - насколько низкоуровневая разработка на гошке? В том смысле, что насколько много приходится изобретать велосипедов и писать инфраструктурный функционал под свои задачи (начиная от пресловутых реализаций структур даных, заканчивая клиентами для месседж брокеров и пулом коннектов к БД) Какие нужные знания в целом по cs, чтобы жопа не горела? мими-крудошлеп
Прошел го-тур, после того, как прочию книжку по гошке из оп-поста, то можно вкатываться на мидла при условии наличии бекграунда в 3 года в вебне и интерпрайзе?
Кто-нибудь может пояснить почему, если функция возвращает значение как указатель на структуру, то можно не присваивая результат переменной обратиться к полям структуры, а если возвращает саму стркутуру, то это ошибка. В спеке эти моменты подсвечиваются в контексте адресуемости значений, но не понятно, почему с указателями это работает.
>>2717234 мб ты про методы с поинтер ресиверами? чтобы их вызвать нужно адресуемое значение (ну так как нельзя получить поинтер на неадресуемое значение)))
>>2717456 https://go.dev/play/p/45b_ZMmVBMP Если результат функции никуда не передавать, то не работает. Не совсем понятно, почему вернувшийся указатель из one() у компилятора подозрений не вызывает, хотя по сути значение тоже теряется и не используется. В общем адресуемость - мутное определение для меня >>2717728 https://go.dev/play/p/oJPDl4OTwMs Не, смотри выше. Поинтресивером может быть переменная-значение, если она адресуемая. (компилятор сам возьмет адрес). Как понимаю, только если методы интерфейса имплементить для поинтер ресивера, то компилятор ругнется, при попытке положить в переменную-интерфейс само значение, а не указатель.
>>2718078 Потому что результат функции не addredsable. Почему в каких-нибудь плюсах это работает, а в го нет - потому что плюсы это сложный и замороченный язык, а го - простой и понятный. Что не ясно?
>>2718489 addressable. Нечто, у чего можно взять адрес. В сях, впрочем, помнится, тоже нельзя было возвращать указатель на локальную переменную Здесь можно, но его следует приземлить перед использованием.
>>2718491 >нельзя было возвращать указатель на локальную переменную >Здесь можно. Становится понятно, что утверждение "Го учится за пару вечеров" не более чем рофл. Хз как можно догадаться про утерждение выше, хоть и прочитал спеку и effective go
>>2718078 Потому что результат выполнения функции - это rvalue. То есть подразумевается, что это временный объект который неизвестно где размещен, может быть в регистрах, может быть в стеке или в куче. С указателем прокатывает, потому что это уже и есть адрес по которому можно сходить. Вот хороший видос по теме. Там хоть и плюсы, но эти концепции универсальные для всех языков. https://www.youtube.com/watch?v=XS2JddPq7GQ
>>2718879 >нельзя было возвращать указатель на локальную переменную >Здесь можно. > Становится понятно, что утверждение "Го учится за пару вечеров" не более чем рофл. всмысле? тут просто убран кейс, на котором валятся новички в сишке. ну люди без знания сишечки о нём даже знать не будут.
>>2719750 Ну вот же ты сам делал пример. one - указатель на структуру - компилятору норм, rvalue - это адрес по которому есть это поле, ошибки нет. two - структура - компилятор негодует, неадресуемое rvalue, которое хуй знает где, проверить есть ли у него поле он не может, потому что нет адреса где живет эта ебола
>>2719808 А для rwo() при этом эфемерная копия значения, тут же исчезающая, имеет адрес и а нее можно положить значение. В общем, классическая сол и фасол.
>>2721308 редко. в редких случаях, когда ты встречаешься с тем, что у тебя что-то не аддрессабл, то в первую очередь загорается жопа LSP, потом тебе IDE красно красным светит на весь дом, что так делать нельзя и ты пишешь еще строчку, чтобы сохранить залупу в переменную. тут буквально одна редкая проблема с одним самым простым решением.
а вот nil разыменовать получается намного чаще. обычно выливается в то страдание, что тебя на PR просят добавить проверку на nil. ну или прод начинает пятисотить, но это реже.
>>2665435 (OP) Кто-нибудь пишет опенсорс проект? Или может стартап? Готов бесплатно или почти бесплатно(если вы все же зарабатываете деньги с проекта), писать код на Go, опыт коммерческой разработки - 3 года, писал всякое разное на питухоне, начиная от крудов на джанге, заканчивая простыми ML моделями для бизнеса(деревья решений, классификация), потом упоролся в низкий уровень, компуктер сайнс. Поскольку работу найти де факто невозможно, если не из РФ(т.е озон, вб, сбер отпадают), нужно поддерживать скилл.
Еле как написал первый минорный сервис в прод на гохе и понял, что нихуя не понимаю в гошном стиле и бест практисах после другого языка с сахарком и гибкостью. Что делают вместо дефолтных аргументов и опциональных значений (и как отличать опциональные значения от отсутствующего если делать через неприсвоенную переменную), как справиться с вездесущим if err != nil и т.д. В общем, где можно посмотреть идеальный код со множеством кейсов где все разложено по полочкам с объяснениями, может даже книжка/статья найдется.
>if err != nil в effective go есть пример https://go.dev/doc/effective_go#recover, где можно обыграть внутри своего пакета отлов ошибок на верхнем уровне. Если ошибка кастомная, то обрабатываем, если нет, то паникуем.
Не могу придумать идею для пет проекта, в голову лезут велосипеды и банальщина. Подкиньте идей, плес. Желательно, чтобы применить канкаренси и очереди.
Не могу придумать идею для пет проекта, в голову лезут велосипеды и банальщина. Подкиньте идей, плес. Желательно, чтобы применить канкаренси и очереди.
В пистоне есть удобные средства для контроля горутин и отслеживания их состояния типа gather, wait_for, Task, as_completed и т.д. В ГО есть что-то подобное или нужно только вокрун каналов, вейт груп и селектов плясать?
>>2726557 Зачем от них избавляться? Если функция может вернуть ошибку, то естественно что ее нужно обработать. Если тебе похуй то можно использовать _ и не проверять ничего.
Алсо, очень удобно оборачивать ошибки на каждом уровне через fmt.Errorf("хуе-мое не могу отправить: %w", err) и передавать на самый верх в main. Так если ошибка возникнет, получишь полный и удобный стектрейс по которому найдешь проблему за несколько секунд.
>>2726557 это особенность языка. через какое-то время начинают появляться подозрения, что функциии, не возвращающие ошибки и не принимающие контекст на вход могут делать сетевые вызовы ниже по стеку даже если это не так.
>>2726557 алсо >зачем-то копируется поинтер на дефолтный хттп клиент, который юзается 1 (один) раз >конструктор реквеста без параметров может зафейлиться >err = errors.New(fmt.Sprintf()) >анмаршал и рид жсона в два шага вместо json.NewDecoder().Decode() без каких-либо действий, которые бы оправдывали это
>>2728026 годно, спасибо >конструктор реквеста без параметров может зафейлиться Имеется в виду makeAuthRequest? Реквест по сути статичный, параметры подставляются из env
Аноны поясните за горутины Не как они работают, а области их применения? Можно ли, допустим ,получив структуру Some у которой есть n вложенностей, которые необходимо заполнить, заполнить вызвав n горутин, каждая их которых изменит изначальную структуру Struct?
>>2732495 >Можно ли, допустим, получив структуру Some у которой есть n вложенностей Можно, только в твоем конкретном примере частный случай, параллельность. https://go.dev/play/p/KTM1booW8Y9 Анон выше правильно заметил, что многопоточность скорее про асинхронность >>2732538 Смотря какая задача стоит, если каждая операция съедает много процессорного времени, а отклик нужен быстрый, т оимеет смысл распараллелить вычисления. Но тут еще сложности вылезают с подсчетом оптимального числа горутин и как их шедулер раскидать между ядрами вообще не ебу пока что.
>>2732778 Go самостоятельно раскидывает по ядрам процессора тяжелые матаны и самостоятельно дробит байты в раме под эти расчёты. Если ты хочешь поиграть в русскую рулетку со своим коленом, то есть инструменты ручного управления этими вещами.
>>2732495 ну вполне обычный паттерн. есть какая-нибудь структура, аггрегирующая разные сущности, в горутинах запускаются сетевые походы в сервисы, которые отдают эти сущности, их ответы складываются в одну структуру (ну чаще там еще какие-нибудь действия над ответами идут и структура формируется уже после обработки) и т.п.
Go или Golang — компилируемый язык программирования от создателей таких шедевров, как UTF–8, язык С, UNIX, Plan9 и других. Go поддерживает типобезопасность, имеет богатую и универсальную стандартную библиотеку и инновационные семантики одновременности: все то, что мы в индустрии называем concurrency и parallelism. На сегодня язык Go является маяком стабильности, прагматичности, де-факто представляет из себя стандарт в мире бэкенд–микросервисов и серверного оркестрирования.