Cамого МУЖЕСТВЕННОГО в мире языка Go тред №15 /go/
ТУПОЕБСКИЙ ХОМЯК ЭДИШН
Go или Golang — компилируемый язык программирования от создателей таких шедевров, как UTF–8, язык С, UNIX, Plan9 и других. Go поддерживает типобезопасность, богатую и универсальную стандартную библиотеку функций и инновационные семантики одновременности: все то, что мы в индустрии называем concurrency и parallelism. На сегодня язык Go является маяком стабильности, прагматичности, де факто представляет из себя стандарт в мире бэкенд–микросервисов и серверного оркестрирования.
Обсуждаем язык, смеемся с залетных крестоносцев, обсуждаем почему нам не нужны дженерики, наследование и эксепшены, по каждому багу находим трехстраничный пост в официальном блоге Go, объясняющий почему это на самом деле фича, ждем, когда нам завезут дженерики, наследование и эксепшены.
Растобляди завидуют, сектантская запарта не переваривает.
>>1986211 Ты так говоришь, будто гринтреды изобрели в пщ, лол. Но даже если бы это было правдой, начнём с того, что все популярные языки спиздели лямбды из борщехлёбской хуйни без задач и спокойно живут себе, а борщехлёбская хуйня без задач так и осталась никому не нужной.
>>1986216 Смотри конкретно модель реализации шедулера в Go и в шарпе, а потом попробуй разобраться кто у кого спиздил. Желательно чтобы ты больше не унижался. спасибо
>>1986216 > все популярные языки спиздели лямбды из борщехлёбской хуйни без задач и спокойно живут себе, а борщехлёбская хуйня без задач так и осталась никому не нужной. Так в этом и суть. Лямбды в мейнстримной параше появились только сейчас, а в том, что ты называешь борщехлебской хуйней, были ещё когда твоя бабка была молодая. Точно так же зависимые типы. В идрисе есть уже 15 лет, а в общепринятый мейнстрим завезут ещё через 15.
Ну да, нахуй нужны эти ваши метапрограммирования, DSL, лямбды, ADT, logic programming, это же всё долбоебов придумывалась, а не для лаканичного и человекочитаемого кода сформированного в виде коротких формул.
Go для макак. Proved. > Так для чего же он был создан таким простым? Вот пара цитат Роба Пайка (прим.пер.: один из соавторов языка Go):
> Ключевой момент здесь, что наши программисты (прим.пер.: гуглеры) не исследователи. Они, как правило, весьма молоды, идут к нам после учебы, возможно изучали Java, или C/C++, или Python. Они не в состоянии понять выдающийся язык, но в то же время мы хотим, чтобы они создавали хорошее ПО. Именно поэтому их язык должен прост им для понимания и изучения.
> Он должен быть знакомым, грубо говоря похожим на Си. Программисты работающие в Google рано начинают свою карьеру и в большинстве своем знакомы с процедурными языками, в частности семейства Си. Требование в скорой продуктивности на новом языке программирования означает, что язык не должен быть слишком радикальным.
>>1986304 > Что? Так Роб Пайк в сущности говорит, что разработчики в Google не столь хороши, потому они и создали язык для идиотов (прим.пер.: dumbed down), так чтобы они были в состоянии что-то сделать. Что за высокомерный взгляд на собственных коллег? Я всегда считал, что разработчики Google отобраны из самых ярких и лучших на Земле. Конечно они могут справиться с чем-то посложнее?
>>1986332 У нас на уровне языка нет понятия инициализации, есть только понятие объявления, var я Я При этом в переменной "я" оказывается нулевое значение для типа "Я" (0 для чисел, false для булов, nil для поинтеров и т.д.) Метод можно вызывать и у nil значения, что само по себе не запрещено. Правда всё упадет с паникой, если ты попытаешься этот nil задереференсить. Но у тебя метод может этого и не делать, например. Или сам проверить условный self на nil и обработать это как-то, например провести ленивую инициализацию, если необходимо. Вообще, в go считается хорошим правило make zero value useful, в стандартной либе это реализовано в случае sync.Mutex и sync.WaitGroup, которые после объявления готовы к использованию. В остальных случаях обычно пишут функции-конструкторы.
>>1986353 На самом деле не совсем так, инициализация через make есть для 3-х типов: слайса, мапы и канала. Но там особая ситуация, т.к. там нужно указать length и/или capacity. В первых двух случаях это нужно для того, чтобы сразу аллоцировать достаточное кол-во памяти, чтобы потом при добавлении элементов не копировать несколько раз данные в новую область памяти.
Гоферы, помогите разобраться Пытаюсь осилить сей язык, параллельно решая маленькие задачки, наткнулся на просторах на упоминание задачки, где нужно инвертировать контент файла И у меня вроде всё кое-как получилось, глазами вижу результат, но вот в самом конце содержимое выдать в stdout через ReadAll на 45 строчке не вышло, что я делаю не так? Вроде как Flush должен был решить проблему мою https://play.golang.org/p/Nguk776CGI8 Файлик там простой, вида типа 1 2 3
>>1986406 Попытайся отделить логику (функцию, которая принимает io.Reader и io.Writer) от реального взаимодействия с файлами. Скорее всего у тебя проблема во втором. И да, bufio.Writer.Flush не флашит сам файл, он именно сбрасывает буфер из bufio.Writer'а
>>1986304 Ты такой умник, что запостил это в ML–треде >>1986303 → перед тем как попасть в правильный. Давай разберем все Робом пайком написанное, в этот раз без лишних иллюзий и маня–фантазий.
>наши программисты (прим.пер.: гуглеры) не исследователи. Всё так. Гугл – это рекламная компания, в которой программисты должны продвигать технические решения вперед, причем сам этот технический процесс заключен в довольно консервативные рамки. Речь идет не об искусстве, не проедании грантов в университете, не наебывании дяди, а о том, чтобы зарабатывать гуглу деньги. Речь идет о ремесле. >Они не в состоянии понять выдающийся язык, но в то же время мы хотим, чтобы они создавали хорошее ПО. Это неправильный перевод. Brilliant скорее переводится как блестящий, а не выдающийся. Тут есть tongue–in–cheek со стороны Пайка, а именно стоит сперва обратить внимание на то, кто такой Роб пайк и какой у него бекграунд. Роб пайк — это чувак, который бОльшую часть своей жизни провел в чистой воды расовой исследовательской среде, где не гуглеры, а реальные исследователи, проедатели R&D корпобюджетов и всяких грантов от американских исследовательских институтов. Там же он своими руками создал UNIX, там же создал plan9 и ты удивишься, но в списке его заслуг можно найти Newsquak, Limbo и другие прорывные на тот момент технологии. Не говоря уже о самом большом его достижении, plan9, это вообще навеки оставило его в пантеоне величайших компьютерных исседователей. Теперь, лапочка, когда ты понял бекграунд этого чувака, ты должен понимать значение этой цитаты. Одно дело фантазировать на тему, а другое дело выполнять работу (продвигать техническое решение вперед) и поверь, Роб пайк не имеет никаких иллюзий на этот счет. Пайка и Томпсона пригласили работать в гулаг. Они поработали, чето там поделали (я даже не хочу вспоминать sawzall, пожалуйста, не надо) и у них появились определенные претензии к тому С++ и джаве, что на тот момент использовались в 95% кода гугла, в связи с чем они решили сделать свой язык. Это нормально. Как оказалось, помимо нормальности, этот язык еще оказался связан и с успехом. Потому что делали его профи, а не какие–то феминные томбои из университета, которым нужно что–то кому–то доказывать. Никому из создателей Go не надо ничего доказывать, их желания полностью сопряжены с рабочими задачами, с продвижением технического решения вперед. Это именно то, что Go позволяет делать. Не фантазировать, не умничать, не заниматься "искусством" я вообще ору со всех программистишек, которые думают что в этом ремесле больше искусства, чем например в литье а делать то, за что тебе платят деньги. Продвигать. техническое. решение. ВПЕРЕД >Он должен быть знакомым, грубо говоря похожим на Си. Совершенно верно. В любом ремесле, предпочтение всегда отдается более привычным инструментам. >Что? Так Роб Пайк в сущности говорит, что разработчики в Google не столь хороши, потому они и создали язык для идиотов Это не так. Роб пайк пытается сказать тебе–дурачку и таким дурачкам как ты, что есть большая разница между рабочей средой, где разрабатываются коммерческие продукты и рисерческой дармоедской средой, где приоритетом являются понты "блестящими" языками.
Если ты хочешь, чтобы твой язык блестел, достаточно помыть рот.
>Что за высокомерный взгляд на собственных коллег? Иметь реальный, адекватный взгляд на вещи — это не высокомерие. Пайк держит своих "коллег" за тех, кем они являются — кодерами на зарплате, единственная задача которых, я повторюсь, продвигать техническое решение вперед. Поэтому он подарил нам Go — язык, который, на его взгляд, максимально эффективно позволяет справляться с этой задачей.
>Конечно они могут справиться с чем-то посложнее? Не могут. Ты когда–то был в литейном цехе? Клещи, изложница — ты не найдешь там сложных инструментов. Потому что они не нужны в этом рабочем процессе. Все кто считают иначе — нихуя не понимают в ремесле.
>>1986391 Бла Бла Бла, тупые аргументы–не–аргументы от маня–фантазера, который не знает:
(а) историю вычислений, портабельности софта (б) обстоятельств рынка производства ПО (в) ...судя по сказанному, ничего другого он тоже знать не может...
>Растобляди завидуют, Нет конечно. В сегменте низкоуровневых языков раст самый выразительный - зачем его вообще сравнивать с языками со сборкой мусора.
>>1986422 И каким образом порезанность языка, отсутствие в нем элементарных фич, помогает "продвигать техническое решение"? Элементарно кода в разы больше писать приходится. Приходится концентрироваться не на логике, а на костылях.
>>1986430 Как-то похуй чем там исторически обусловленна убогость и околонулевая выразительность говняшной, и по каким нелепым причинам она получила такое широкое распространение в свое время. Даже если тому были некие непреодолимые причины, это никак не меняет того, что это обьективно хуевый язык, совершенно не приспособленный для написания чего-либо сложнее автоматизации сливных бачков, и что все нужно было делать по-другому.
>>1986408 Не совсем понял, как тогда реально взаимодействовать с файлами, если не через ридеры-врайтеры, но спасибо за ответ! Попробую покопаться ещё, нагуглить много не получилось
>>1986422 > я вообще ору со всех программистишек, которые думают что в этом ремесле больше искусства, чем например в литье Ты не прав. Программирование - искусство. Вернее математика - это искусство, прекрасная и идеальная база нашей реальности, а программирование это просто способ оформить формулы как нечто реальное. https://youtu.be/DxfEbulyFcY https://youtu.be/lctXaT9pxA0 https://youtu.be/X-iSQQgOd1A
>>1986431 Никто кроме растеров не сравнивает эту парашу с нормальными языками. Это кокрастоке растобляди–маргиналы лезут в нормальные немаргинализированные отрасли со своими советами и рекоммендациями насчет того, как правильно на самом деле делать вещи.
>>1986441 По существу хоть когда-нибудь что-нибудь напишешь?
Алсо, насчет нюансов: >Василь Иваныч, а что такое «нюанс»? >Ну, Петька, это так не объяснишь, это показывать надо… Становись-ка раком да скидавай портки. >Петька встал, Василь Иваныч сзаду заехал и говорит: >Вот видишь, Петька, у тебя хуй в жопе, и у меня хуй в жопе. Но есть один нюанс!
>>1986524 Хороший анекдот. А что тебе по–существу сказать? Раст — это ворованная LLVM параша, если в 2012 году еще казалось что из этого исследовательского языка может получиться что–то годное, чтобы оно имело собственный путь, то сейчас от этих иллюзий ничего не осталось. Гошечка пошла по совсем другому, своему пути, где с самого начала центровые чуваки сказали что на уступки идеологам никто идти не собирается и в результате смогли сохранить свою идентичность. Ты говоришь "порезанность языка" будто это что–то плохое, а у меня есть эмперические данные что эта порезанность — это в данном случае не баг, а фича, что говорится. Ты говоришь приходится концентрироваться на "костылях", но я в своей практике работы с го редко когда встречаю костыли. Обычно это очень предметный код, где за 10 минут ревью ты сразу видишь места для оптимизаций, а все структурные ошибки набитым глазом выкупаются еще быстрее. Элементарно — это когда тебе не надо задротить, а решение продвигается будто само по себе. Растобляди воняют насчет полиморфизма, хотя на самом деле в расте этого полиморфизма и нет–то, ну ладно в последнем релизе добавили константные дженерики, только смыслу? Все равно это все уже в С++ есть много лет и дает больше возможностей. Что касается го, так тут с самого начала всем сказали что "будем мономорфизировать" и это работает. Компилируется все быстро, кодогенерация есть в стандартной библиотеке и опять–таки, дает много больше возможстей, чем ограниченные говномакросы в том же расте. Ты генерируешь один раз, а потом компилируешь — и компилируешь быстро. Да, мономорфизация, да, нет каких–то там гарантий, но это никому не мешает. Потому что у языка есть какой–то свой путь, который четко обусловлен обстоятельствами его использования, а не фантазиями насчет того, как должны выглядеть воображаемые пирамидки в коде. Какую конкретику я могу тебе предоставить? Для кого–то программирование это средство достижения поставленных задач, для нормальных пацанов, а для кого–то это какая–то бесконечная игра в фантазию, которая заканчивается не продуктом, а такими же фантазиями. Если получится довести до рынка — уже успех, в то время как в любой другой немаргинализированной среде это только база. Подразумевается что без этого не может быть никаких разговоров, у маргиналов это не подразумевается.
>>1986539 > Ты говоришь "порезанность языка" будто это что–то плохое Это сука и есть зло. Зло в чистом виде. Ненавижу всяки питухоны, и жс-ы из-за того, что они нихуя не расширяемые, и любой код, что выходит за пределы их юзкейсов и возможностей превращается в нечитаемое, уродливое нечто. мимо лиспо-пролого-боярин
>>1986539 >пок пок свой путь кококок не баг а фича нормальные пацаны just use for loops
Что-то ничему новому за столько лет гопетухи так и не научились. Ну давай ты хоть расскажешь про эти эти самые >эмперические данные про то что порезанность - хорошо
Только плиз без смехотворных фантазий про >Обычно это очень предметный код, где за 10 минут ревью ты сразу видишь места для оптимизаций, а все структурные ошибки набитым глазом выкупаются еще быстрее.
Потому как в процедурных гоу-полотнах вся предметность растворяется в низкоуровневых (а других в гоувне просто нет) тумба-юмба деталях реализации и никакая доменная логика так не проглядывается, пока не прочтешь все целиком снизу-вверх 3 раза.
>Элементарно — это когда тебе не надо задротить, а решение продвигается будто само по себе. Это называется duct tape programming который работает хорошо только кода пишешь манясервисы на 300 строк, и если нужно что-то менять, то весь код просто выбрасывается и пишется по новой. Гоу в принципе не подходит для монолитов и даже для SOA, онли микросервисы, просто потому что язык другого не позволяет. А перекладывать архитектурные задачи на инфраструктуру - ну такое, конечно модная тема была лет 5 назад, но многие уже обожглись и спрыгнули.
>>1986538 Ни разу ничего такого я не писал, считаю все существующие на данный момент неборщехлебные языки говнищем. Голанг где-то лучше, где-то хуже. Иначе я бы в этом треде не сидел.
>>1986539 А я наоборот четкую идеологию в ущерб удобству и здравому смыслу только в go вижу. На любой вопрос почему в этом языке нету X адепты голанга начинают улулюкать и рассказывать что X НИНУЖНО, как им хорошо живется без X, X это вообще неправильно и т.д.
>>1986559 > Потому как в процедурных гоу-полотнах вся предметность растворяется в низкоуровневых (а других в гоувне просто нет) тумба-юмба деталях реализации и никакая доменная логика так не проглядывается, пока не прочтешь все целиком снизу-вверх 3 раза. Двачну. Современный Паскаль какой-то. Поскорее бы похоронили это говно, чтобы глаща не мозолило.
>>1986559 >нормальные пацаны just use for loops А нет разве? Или ты думаешь что если тебе комбинаторы завезли, то ты сразу супермозг? Внезапно, оказывается, на линейных комбинаторах много не напишешь! Ну, до тих пор пока тебе нужно делать какие–то тривиальные преобразования, по типу собрать сумму по списку, то наверное, напишешь, но как только оказывается что логика список негомогененная, и где–то возникают новые порядки, сразу комбинаторы садятся на жопу. Это, кстати, очень связанно с параллелизмом, см. такие языки как Futhark, где это большая проблема — запихнуть логику в комбинаторы второго порядка, чтобы сохранить при этом все плюшки многоядерности в GPU.
>Потому как в процедурных гоу-полотнах вся предметность растворяется в низкоуровневых Это не так. На низком уровне у тебя низкоуровневые детали, на более высоком уровне — высокоуровневые. Что тебя смущает, обработка ошибок? Или все–таки отсутствие комбинаторов на уровне языка? Плиз, с ошибками все просто: ты либо их обрабатываешь, либо нет. Го делает очень больно, если ты их не обрабатываешь. А что касается комбинаторов и прочей Фпараши, так я могу только дать флаг в руки: большинство прикладных задач наивно не помещаются в комбинаторную логику, а ненаивный подход создает такие накладные расходы, что с таким успехом можно сразу и на фортране писать. Не смеши мои носки.
>никакая доменная логика так не проглядывается Это не так. В нормальном коде на го, доменная логика всегда проглядывается, причем не хуже, чем в любом другом языке программирования.
>Это называется duct tape programming который работает хорошо только кода пишешь манясервисы на 300 строк Я не хочу открывать для тебя секреты, но duct tape progamming это в принципе весь programming в целом. Если ты думаешь иначе, то у тебя банально мозги промыты какой–то методичкой, которая утверждает иначе. "Ну у нас–то мы действительно делаем правильно!" Это такая глупость, которая в 2021 году даже не требует внимания, настолько очевидно, что это глупость. Ты вообще хоть день программировал в нормально конторе? Представляешь себе немного, как выглядит любой технический процесс? Скажи мне, ололо мастер правильного программирования, что это такое, как не duct tape programming? Разница заключается лишь в том, как ты относишься к этому процессу, вставляешь ли ты палки в колеса, или решаешь эти проблемы?? На этом этапе и становится ясно, что ты либо клеишь изоленту, либо ее отдираешь. По сути, третьего не дано. Все, кто говорят иначе — просто дешевые пиздаболы, которые пытаются продать свою (очередную) секту. Вся суть ремесла в том, чтобы писать грамотный код в инварианте, а не пытаться подогнать его под какую–то конкретную логику, которая тебе кажется эстетичной. Надеюсь, ты когда–то это поймешь.
>А перекладывать архитектурные задачи на инфраструктуру С подключением. Все "архитектурные", как ты говоришь, задачи — это задачи инфраструктуры. Код должен выполнять конкретные манипуляции между устройствами ввода и вывода за оптимальное время. По этой причине ORM это параша (покажи мне хотя бы одну ORM которая используется в гугле/фейсбуке/амазоне/да где угодно) и ровно по этой же причине любой дроч на "конструкции" такой же бесполезный, потому что в конце–концов это просто манипуляции поверх I/O, а мы уже очень, очень давно, умеем писать эту хуйню. Ты говоришь сишка с ее переполнениями, ок, но это даже 15 лет как не является стандартом. Все кто пишут на сишке сегодня — пишут на ней совсем иначе, как писали на ней 20 лет назад. Переполнения? Плиз. Тебе предлагается оставить свою методичку в другом месте, завалить ебало и писать корректные вещи, завместо нытья по поводу выдуманных вещей.
>>1986596 >в ущерб удобству и здравому смыслу А как ты себе вообще представляешь что такое здравый смысл? Рассел говорит: "Есть одна рука, есть другая рука, значит реальность существует и в ней есть хотя бы две руки." Ахуенный аргумент, только вот ни в каком формализме он смысла не имеет и если ты дольше двух дней в этой теме, то ты понимаешь что это тупо дроч на семантику. Что такое здравый смысл? Комбинаторы — это здравый смысл? Если ты математик–комбинаторик, то это вообще единственный смысл. Если ты алгебраист, то внезапно, это глупость, потому что львиную долю форм ты так не запишешь.
>На любой вопрос почему в этом языке нету X адепты голанга начинают улулюкать и рассказывать что X НИНУЖНО, как им хорошо живется без Х Да потому что им действительно хорошо живется без этой хуйни. О какой хуйне идет речь? Дженерики? Пожалуйста, умники, мне приходилось писать сложные структуры данных, распределенные балансные деревья и прочью хуйню — каждый раз ты пишешь эту хуйню по–разному. Внезапно, это не учебник по computer science, есть реальные ограничения и ты вокруг этих ограничений танцуешь. Толковый чувак напишет эту дрянь на любом языке, быдло ничего не напишет и будет только лишь ныть про дженерики. У нас в С++ есть дженерики последние 30 лет и что? Ты сильно в восторге от С++? Я не думаю. Львиную долю жизнь я прописал на С++ и не могу сказать что потратил время как–то особенно хорошо. Ну да, есть полиморфизм, ну да, пишешь умно, но какой ценой? Нельзя делать вид, что на поддержку, в коде, этих потуг не уходит 50% времени. Уходит ведь. Потому что это потуги, потому что это дроч на очередные "пирамидки", на очередную семантику, которой СДВГшный программист пытается занять себе мозги, вместо продукта, который он разрабатывает.
Если речь идет об обработке ошибок, то см. выше что я писал. Ты либо обрабатываешь ошибки, либо ты этого не делаешь. Го делает больно, когда ты этого не делаешь. Все очень просто, "магически", по мановению палочки, ничего нигде не обрабатывается. Остальные пререкания это просто дроч на семантику того, как ты это делаешь. В го этого дроча нет.
>>1986617 Если ты обрабатываешь ошибки, то тебе не нужны "отладочные данные" в проде. В протвином случае ты принимаешь решение НЕ обрабатывать ошибки. ОК, это легетимное решение. Поэтому тебе дают отладочные данные. Не хочешь их иметь? Для этого есть сборочные флаги, которые их исключают.
По умолчанию, предполагается что ты ленивый (так и есть).
>>1986649 >Внезапно, оказывается, на линейных комбинаторах много не напишешь Вот это кстати действительно горькая правда, куда легче написать и понять: for { c1 <- colorList c2 <- colorList if c2 != c1 c3 <- colorList if c3 != c2 && c3 != c1 }
Чем начать городить какую-то хуйню с комбинаторами. Хотя в той же скале это всего лишь синтаксический сахар.
>>1986672 довен, даже при установке флагов - бинарник дохуя отладочных данных содержит. Все функции в таблице экспорта, вопрос - нахуя? Если я их не импортирую.
>>1987204 Затем что если готовый бинарник будет весить 10кб, а не 20мб, никто не будет покупать винты. Если бинарник будет жрать 650кб, а не полгига, никто не купит память. И так далее.
>>1986649 > Что тебя смущает, обработка ошибок? Или все–таки отсутствие комбинаторов на уровне языка? Отсутствует возможность у языка строить абстракции. > Внезапно, оказывается, на линейных комбинаторах много не напишешь! И нахуй тебе линейные комбики, если есть структурная рекурсия?
>>1988025 там вскукарек был "гугел отказался от голанга". Ты мне даешь какой-то непонятный рейтинг, где CSS оказывается язык, лол, а ассемблер мол вообще пропал между 2012 и 2013-м.
>>1988054 Дискорд еще от него отказывался года 2 назад. Там был какой то фатальный недостаток в сборщике мусора го, из за которого у них спайки рисовались на cpu графиках. Перешли на раст кста.
>>1988708 Фатальный недостаток был скорее в самом сервисе дисковода, где обезьяны–неосиляторы пытались сделать из программы на Го буквально аналог редиса, причем вручную выглючали GC и закономерно получили по рукам. С тех пор сборщик был заточен и под эффективную работу даже в таких случаях, но поезд ушел: блогпост "мы уходем в раст" был написан, всем обезьянам завезли новую методичку, где го кал, а раст ахуенный.
Популярнось Го растет значительно быстрее, чем Раста. Особенно в бизнесе, особенно в тырпрайзе.
>>1988789 Ну ты же понимаешь что эти рейтинги ни о чем не говорят? Что раст, что скала, powershell, CSS — показатели этих технологий очевидным образом искажены (не говоря уже о том, что многие из них языками программирования не являются). Количество проектов на расте? Не смешите меня, у каждого второго клоуна–аутиста есть hello world на гитхабе, который умеет примерно чуть меньше, чем нихуя. При этом в бизнесе раст не используется _вообще_ в то время, как го используется везде. По графику может показаться что это технологии одного калибра, когда в реальности, раст — это маргинальная хуйня пошиба хаскеля, а го — это топ-5 актуальная технология для прода.
>>1988730 >Фатальный недостаток был скорее в самом сервисе дисковода, где обезьяны–неосиляторы пытались сделать из программы на Го буквально аналог редиса, причем вручную выглючали GC и закономерно получили по рукам. С тех пор сборщик был заточен и под эффективную работу даже в таких случаях Откуда такие технические подробности?
Объясните нубу как запстить Хэллоу ворлд - установил го на линукс, создал файл с кодом hello.go в домашней директории, ну хз как его интерпретировать, в гугле какой-то треш про модули и разные непонятные способы
>>1988818 Из их собственного блога, конечно же. https://blog.discord.com/why-discord-is-switching-from-go-to-rust-a190bbca2b1f Ну и еще чуваки из той команды отписывали на оранжевом сайте, я в двух словах понял в чем там заключалась история. Russ Cox из команды Go потом работал с ними в последствии для решения подобного класса проблем. То есть что сделали обезьяны? Они сделали грубо говоря один огромный мап с кучей ссылок (лол) понятное дело что когда эта хуйня на куче (она только там и может быть если ты хочешь использовать динамичесские аллокации, аки map) и ты будешь ее постоянно дергать, фрагментировать, что время от времени нужно будет ее балансировать. Что собственно говоря и делал на тот момент GC в гошечке. Потом в поздних ревизиях concurrent M&S сборщика этот недостаток устранили адаптивным путем (я не помню в каком коммите, но это точно делал russ cox) А что касается растоблядей в дискорде, для того чтобы понять насколько их блог–пост идеологический бред, достаточно просто читануть пару параграфов:
>Discord is a product focused company, so we’ll start with some product context. ...И далее следует примерно НОЛЬ продуктовой информации; любой продуктовик (и я в том числе) сразу понимает, что текст писал дилетант, который примерно нихуя не понимает в продуктах. Это моментальный красный флаг в самом начале статьи, который намекает на то, что дальше ничего толкового быть не может.
>With the Go implementation, the Read States service was not supporting its product requirements. It was fast most of the time, but every few minutes we saw large latency spikes that were bad for user experience. Во–первых, программные решения это не то, что поддерживает, а то, что может удовлетворять, либо не удовлетворять ограничения. Во–вторых, тупая шлюха все еще ничего не сказала об этих ограничениях. Кроме того, что "large spikes" судя по всему для них неудовлетворительно, хотя хуй знает что это за спайки. Давай посмотрим дальше.
>After investigating, we determined the spikes were due to core Go features: its memory model and garbage collector (GC). Да-да, конечно, виной всему ни в коем случае не ваш говнокод с кучей ссылок в масштабной хэш–таблице, а именно лейаутинг и сборщик мусора. 100%, отличное оправдание, все обезьяны здесь уже моментально, без всякого сомнения, верят на слово!
>In other words, instead of freeing immediately after the memory is out of use, memory hangs out for a bit until the garbage collector can determine if it’s truly out of use. Опять обсреньк, это просто бред больной шлюхи. Уже в 2018 году сборщик делал concurrent mark, поэтому на самом деле никого ждать не надо, сразу понятно используется участок или нет. Другое дело что ни один рантайм, да что там, ни один уважаемый аллокатор (я не говорю про арены) не делает моментальные освобождения, ведь это тупо фрагментирует память. Опять–таки, если структура твоего лейаута сложнее, чем вектор.
>These latency spikes definitely smelled like garbage collection performance impact, but we had written the Go code very efficiently and had very few allocations. We were not creating a lot of garbage. >[...} >Thus, we figured a smaller LRU cache would be faster because the garbage collector would have less to scan. So we added another setting to the service to change the size of the LRU cache and changed the architecture to have many partitioned LRU caches per server. Нет, ну этот китч я даже комментировать не хочу. Мусор они не генерировали, за исключением записей и инвалидаций (это кэш, карл!) в ХЭШ–ТАБЛИЦЕ! СУКА.
На самом деле, проблемы с большими кэшами, аренами, оффсетами по производительности и т.д. это все известная лапша. И много кто с ней сталкивается в любом языке с рантаймом, в том числе и в Go, где конкретно с этим классом проблем столкнулись практически одновременно БД чуваки из Cockroach и dgraph (две просто ахуительные СУБД написанные на Go):
В итоге имеем что? Обезьяны из дисковода оказались не в состоянии сделать кэш, не в состоянии сделать аллокатор, не в состоянии сделать арену. Да что уж говорить, как оказалось, они в своих потугах ничего не смогли сделать. В итоге, по задаче идеологов, переписали все с нуля на расте (с учетом прошлых ошибок, конечно) и вуаля, внезапно начало работать.
>>1988825 go run hello.go, это чтобы просто запустить файл, но если ты хочешь больше одного файла запускать, менеджить зависимости и т.д. тогда надо делать mkdir hello && cd hello && mod init hello. Внутри достаточно делать go build && ./hello
>>1989023 Я писал совсем другое, ты просто жопой читаешь. Я сказал что экзотические структуры данных, балансные структуры, распределенные структуры обычно пишутся под конкретный лейаут, под очень конкретные операции. Там тупо не нужны дженерики. Вернее, они может даже и нужны, но в перспективе использование конфликтирующих типов оказывается напряжнее, чем просто придерживаться конвенции.
Что касается квиксорта, так там вообще это не проблема. Есть интерфейс для сортировки, который позволяет тебе создать произвольный slice type, для которого ты можешь менять критерии сортировки посредством полиморфизма, инкапсуляции. В некоторых случаях это намного удобнее, чем городить кастомные сравнивающие лямбды. Плюс есть sort.Slice, который сортирует произвольный слайс с твоей сравнивающией функцией. Конкретно что касается сортировки в го, я тут никогда не упирался в дженерики. В дженерики обычно упираешься когда делаешь какие–то простые, но по сути универсальные структуры данных, деревья. Для этих вещей есть кодогенераторы (ничем не зуже макросов в том же расте, точно такая же мономорфизация) Хотя действительно порой забиваешь и делаешь interface{}, но обычно это все рефакторится на какие–то более конкретные интерфейсы с сохранением безопасности. Паттерн матчинга нет, но никто не запрещает тебе его сделать ручками.
Тут уже реквестили как то раз чтива для самоподдува, о крутости гошного подхода к обработке ошибок. Удваиваю реквест, дайте почитать чего умного, а то гугл только негативные статьи подкидывает, а у меня уже жопа пылает от этих err != nil по всему коду блять.
>>1990174 Это я реквестил. Вот вчера наткнулся на https://habr.com/ru/company/mailru/blog/490340/, правда самоподдув не удался. Только еще больше жопа сгорела с того, какой же дегенерат это писал, и с того факта что существует уйма дэбилов которые во всё это верят.
>>1990495 Ну это дефолтный шитпост с хабра. Там день через день подобная хуета публикуется с размазываением абстрактных фантазий по дереву от очередного графомана. А я правда хочу понять, почему сука нельзя сделать НОРМАЛЬНО ебучий обработчик. Да хер с ним даже, это сложно и не 'ПУТЬ GO', ну или исключения ебаные добавить. Невозможно же читать этот пиздец, даже в стандартных библиотеках.
>>1990174 Просто сделай макрос для этой хуйни и забей хуй. Почему у тебя пылает от безобидной строчки кода? Или ты попросту решил что ты лучше всех, типа ты "не такой", повторять одну и ту же строчку это "не для тебя"?
>>1990707 Да ничего я не решил, просто это на мой, не самый опытный взгляд это выглядит очень топорно и я хотел бы понять почему именно так сделано. А нахожу только невнятный бред, как на хабре выше, либо отмазы, про то, что в гугле по историческим причинам запрещены исключения, как будто это единственный вариант. >>1990710 То есть в других языках никто ошибки не обрабатывает, только гоша такой весь золотой, на две строчки логики строчка бессмысленной лапши. Понял - понял.
>>1990868 Хуета же подход, в самом деле. Чаще всего никакой обработки, кроме падения с log.Fatal() не требуется, и такой общий обработчик на несколько ошибок очень помог бы. Но нет, давайте копипастить, ибо таков путь.
>>1990868 Во!! Я и хочу такой самоподдув, как у тебя, чтобы чувствовать, что это не язык ебануто спроектирован, а все остальные говно ебаное. Ток надо политинформацию найти грамотную.
>>1990906 Я не занимаюсь самподдувом, просто смотрю на предметную область с высоты мноgoлетнего опыта. Когда–то у тебя тоjе так получится, все впереди.
>>1990927 Чем этот своеобразный подход так хорош и почему его все хуесосят и ниодной статьи нормально объясняющей его превосходство нет? >Ряяя, сначала добейся!! На опыте!! Нипаймешь!!
>>1990989 >Бизнес–логика не может быть "сложной", лол, хватит сочинять. Ну как поработаешь с чем то сложнее магазина про продаже носков - тогда и поймешь.
>>1990989 > Бизнес–логика не может быть "сложной", лол, хватит сочинять. Как тебе требования в духе "необходимо автоматически проводить платёжные документы указанного типа, счёт получателя в которых начинается с таких-то цифр, счёт отправителя есть в указанной таблице специальных счетов, но только в первый день месяца, если он не является выходным"? И такой хуйни по сравнению с крудами в проекте просто дохуя.
>>1990996 >необходимо автоматически проводить платёжные документы указанного типа, счёт получателя в которых начинается с таких-то цифр, счёт отправителя есть в указанной таблице специальных счетов, но только в первый день месяца, если он не является выходным Изи, за свою карьеру неоднократно делал такие вещи как для управления инвентарем/персоналом, так и в финтехе (clearning, compliance). ничеgo сложноgo в этом нет
Как написать на Го скрипт/приожение, который раз в N часов будет сохраняться сториз из Инсрамма выбранных акаунтов? А еще в идеале, чтобы на "репостных" сториз он шёл на акканут оригинаьной сториз и сохранялоригинал оттуда
>>1990938 >Ребзя мне тут сказали, что в бекенде петухон почти все Это правда, новые сервисы на питоне это либо обертка над МЛ хотя на самом деле можно для этого использовать что угодно, даже го либо интернет-магазины на джанге. Если хочешь вкатиться в бекенд бери ноду, на нее вакансий в 4 раза больше, только соглашайся на работу только если они не юзают тайпскрипт, иначе будешь 95% времени фрустрировать. >и скоро на его замену придет гошечка. Это правда? Я думаю когда-нибуть го придет на замену джаве и шарпам, но это случиться не завтра и не послезавтра.
>>1991053 >TypeError: "foo" is not a function >TypeError: Cannot read property of undefined >TypeError: null is not an object при том что, блядь, typeof null => "object"
>>1991084 >что такое "логика" в данном контексте Получения списка сторсисов, сопоставление его с локальным списком сторисов, найти несовпадения и скачать их. >что такое крон Линуксовый сервис, с помощью которого можно запускать скрипты с некоторой заданной периодичностью >Я 0 в программировнии. Тогда тебе нужно либо заплатить денег фрилансерам, либо найти энтузиастов, которые тебе за так напишут это, либо научиться программировать и только после этого попробовать реализовать что-то подобное. С нуля это слишком сложно. Попробуй курсы на степике, если у тебя цель обучиться программированию. > Просто гуглил, и в Инете написано что Го лёгкий язык. Так часто говорят, но это не совсем корректно. Это как с топором и пилой - с пилой тебе нужно меньше навыков, чтобы эффективно работать, но тебе всё еще нужны навыки. Когда так говорят, то подразумевают, что знающим любой другой язык будет проще начать писать на го. Но для начала нужно знать другой язык, а так же предметную область - в твоем случае это HTTP API и работа с файлами.
Это сказано про языки, которые поощряют обработку исключений в самурайском стиле: возвращайся с победой или не возвращайся совсем. В языках, в основе которых лежат исключения, функции возвращают только корректные результаты. Если функция не может этого сделать, то поток управления идёт совсем по другому пути.
Очевидно, что непроверенные исключения представляют собой небезопасную модель программирования. Как вы можете писать надёжный код при наличии ошибок, если не знаете, какие выражения могут кинуть исключение? Java пытается уменьшить риски с помощью концепции проверенных исключений. И насколько я знаю, в других популярных языках не существует аналогов этого решения. Исключения есть во многих языках, и везде, кроме Java, они не проверяются.
Очевидно, что Go пошёл по другому пути. Программисты на Go считают, что надёжные программы создаются из частей, которые обрабатывают сбои до обработки успешных путей прохождения. Учитывая, что язык создавался для серверной разработки, создания многопоточных программ, а также программ, обрабатывающих данные, входящие по сети, программисты должны во главу угла ставить работу с неожиданными и повреждёнными данными, таймаутами и сбоями подключения. Конечно, если они хотят делать надёжные продукты. #хейтерыСосать
>>1991141 >Блог компании Mail.ru Group Эту графонманию уже раза 3 в треде обоссывали. Сам придумал хуйню - сам с ней поспорил, приправил все это шизоидными высерами про абстрактные ценности и хоба - готова очередная говностатья на хабр, насяльник премию даст. >надёжные программы создаются из частей, которые обрабатывают сбои до обработки успешных путей прохождения Как это связано с реализацией обработки через ебанутую копипасту через строку? Доебался конкретно до непроверяемых исключений, которые в полутра полуметртвых языках активно используют, охуеть аргументация. Остальные языкки видимо пздц опасные и ошибки не обрабатывают. Каким же надо быть куколдом чтобы такой пиздец всерьез принимать.
>>1991141 >непроверенные исключения представляют собой небезопасную модель программирования Ахаха, неудачники. Так и будете крэшиться после каждого необработанного эксепшена? Ах да, у вас же даже экспепшонов нету
window.addEventListener('error', function () { return false }) // похуй, пляшем
>>1991326 Двачну. И лучше избавиться от функций и перейти таки к процедурам. Так же надо избавиться от юникода. Система типов тоже нахуй не нужна, излишество.
>>1991326 Утрою тогда, ведь программисты должны во главу угла ставить работу с неожиданными и повреждёнными данными, таймаутами и сбоями подключения, а эти ваши циклы замусоривают мой код, и иногда приходится даже по нескольку строк писать без err != nill.
Если я стану магистром Go, смогу напистаь на нём кастомный движок для AAA клона ГТА? Хочу свою ГТА, но больше, глубже и качестенее. чем 4 и5. И чем 6-ая часть(в будущем) или С++ онли?
>>1991141 Хоть кто-то ведется на этот маркетинговый буллщит? В нормальных языках функции декларируют как возвращаемый тип, так и возможные типы исключений. Можно их обрабатывать, а можно забить хуй и пусть там наверху разбираются. Это адекватный подход, в отличие от if err != nil
>>1992790 >>1992703 Тогда ещё вопросы: Сколько по-твоему людей участвует в создании ААА-тайтла? Сколько из них – программисты? Сколько примерно процентов из всего продукта составляет программирование?
>>1992797 >Сколько по-твоему людей участвует в создании ААА-тайтла? от 100
>>1992797 >Сколько из них – программисты? 20% от команды
>>1992797 >Сколько примерно процентов из всего продукта составляет программирование? Ну тут как считать. Все 100 Гггабайт игры - код. ССколько времени? Человекочасов? Я думаЮ, дохуя.
Я лишь сравшивал, го для ААА-геймдева подоздит или нихуя? Я хочу оупен-ворлд игру круче, чем будет ГТА 6. Графон, оптимизация, кастомизабельность кастомного движка, задел на апргрейды и будущее.
>>1992845 Ну смотри, ты же у нас в одного пилишь всю игру, допустим ты лично создал с нуля ИДЕАЛЬНЫЙ движок, знаешь его до каждой строчки кода, лол. Твои действия дальше?
>>1992882 Ищу сценариста,делюсь с ним идеей игры. Нанимаю прогеров, создаём ООО, даю им разобраться с движокм и приступаем к игре. Оупен ворлд , сюжет + мультиплеер, карта - город и пригород, в 2-3-4 раза больше ГТА 5. Питер. Дохуя локаций(ВО, крепость, пушкино, ленино, купчино, кронташтд, петергоф, мб кусок выборга? дохуя моделей нужно будет сделтаь, да), зданий, итереьров, баров на первых этажах, подвалов, мосты, порты, заправки, в общем, пиздец как работы 3д-модельерам и художникам. Машины и общее качесто моделей должн ыбы на уровне ГТА и лушче, а не как в Хеви Рейн или СЕйнтс Роу. Радио, разговры НПС на уице по телефону, все пересвзяанное межд собой.
Красивая и иделаьно оптимизирваонная графика, на уровне того, ка ГТА 5 восприимется сейчас, чтобы воспринималсь в будущем(когда выдет +5..10...15?? лет%%вы заметили что игры 2000 в 2010 выглядели а кговно а игры 2010 в 2020 выглядят бодрячком? МЕ2, бетман, гта4/5, анчертед 2). Вода, мосты, пляжи, каналы, ночь и вечеР, улицы полные источников света, теефонов, фар, фонарей. Комедийно-драмтиеский сюжет в стиле ГТА, с юмором, но не как Сейтнс Роу балаган.
уМультиплеер. Охренительый сетевой код, чтобы 80-100 плееров на сервере выдерживал. ЧТобы душевно было.
вообще, для Питера и охуенной графики нужно охуенная оптимизаиця. В центре города дохуя мостов, сложных точек обзора(где поле зрения сразу неск. десятков зданий), высокодетализировные здания 19 века, каналы, а нчью - ещё и свет.
>>1993125 Потому что ОС - это байтоёбский софт, который невозможно написать не на байтоёбском языке, а в те времена, когда писалась их основная кодовая база, разрабов того же Раста даже в яйцах их батьков ещё не было.
>>1993133 Но ведь ты говоришь > совершенно не приспособленный для написания чего-либо сложнее автоматизации сливных бачков, и что все нужно было делать по-другому. а он, оказывается, приспособлен для задач даже более сложных, чем сверхбыстрое асинхронное перекладывание жсонов, которым занимаются все сидящие в треде
>>1993180 >А корованы можно будет грабить? Логика в идеях очень обширная и глубокая. Без роста деревьев в рил тайм(понмии кто общения Мульнье 10+ летней давности? эх время летит), но хочу общий уровень качества мира и геймплейя как рдр 2 и гта 6.
Пока думаю вот, как в GTA VC пасхалка с появляющимся в опредленной предполуночное время изображением пениса, составленном из горящих окон отеля, была реализованна. В оопреденное игровое время менялась текстура облицовки? или что?
>>1993112 Чел, представть. Питер 90-ых или ранних нулевых. Купчино, Дыбено, Автово в роли гетто, НАШИ блять улицы, гаражи, тусклые поребрики(ты вообще обращал внимание как реалистично в ГТА 5 нарисованны текстуры асфальта? их там десятки разных! и бордюры тоже). Мажорный центр, Васька с лысыми парняи и рокерами по вечерам, порты с фсбшными мутками, город охуенно пёстрый. А я ещё загород хочу. И Кронштадт. Каналы, туристы, разговры на улицах. разовры и музыка из баров с кабанчикма на корпоративах. учи интеренсхы миссий, от закладок до уровня фсб.
Я даже думал о физике управления авто, мне в принципе нравится гта 5 больше чем гта 4(можно перемещатся быстрее), но было бы забавно(до N-того раза, после котрого захочется разбить клаву) сделать например на просёлочных частях колею и вохможность немного застрять. НЕ МАДРАННЕР, а что-нибудь казуальне по фану, типа больше непослушности и меньше сцепеления.
Радио, полицеское радиос заспинные в стиле гта 4-5 речами(предзаписааные названия улиц и типа преступлений).
Я только в обшмх чертах держу в голове, хз как реализовтаь свободный масс-шутинг в РФ. Не будет ли инородно выглядеть, не желая превратиь игру в Сейнтс Роу балаган и оставляеясь в рамках сатиры типа ГТА 4 и 5.
Но блин я хчоу игру уровня ААА+, как рдр2/гта6. ДАже просто сделать пустой город такого уровня - это 500+ моделей зданий, высококачественные и всё в одной стилистике. Без повторящихся черт, вывесок и т.д. . Качестенные модели 50+ разных машин, а не как в Хеви Рейн. ЧТобы шины простреливались. Чтоы диски высекали искры и пыль. Это ж сколько работы. А когда трубы глушителя в воде - пузыри из них выплывают. Чтобы про стрельбе в стёкла - они разбивлись как тдельные объекты.
Свет для кадогого здания, мокап, сценарий, сотни страниц реплик актеров. Графика, оптвимизация, саундизнай, дизайн сцен, вообще сборка открытого бесшовного мираю. Движок и инструменты для создания игры.
У вас есть инфа о сетевом коде ГТА 5? мне интересно, когда например на сервере 24 человека - максиумум, и я на складе рядом с портом стреляю в стойку для интсрумнетов и они падают на пол - у других игроков в этот момет на карте - котоыре находятся рядом или вдругом конце карты - тоже пдают? Или я взрываю бочки с топливом на холмах к востоку от ЛС - другие игроки увидят их взорванными, если подъедут ко мне?
>>1993160 Можно высрать подобие, но не ОС. Нужен обязательно компилируемый язык на котором можно делать сырую арифметику указателей. >>1993180 >Но ведь ты говоришь Ты анонов путаешь, я не он.
Вопрос: какого хуя нет нормального веб фреймворка, который будет за меня нормально десериализовать жсоны, не сосать по производительности, и избавит от ебаного бойлерплейта стандартной либы? Потрогал echo, и оказалось, что он даже не может распарсить map[string][]MyStruct, приходится корячиться с вычитыванием из ридера реквеста и встроенным анмаршалером. Перешел с жявы, и меня поражает дикость местной экосистемы, словно в 2007 вернулся.
Какие требование нужны чтобы без опыта устроиться на работу миддлом? Или сразу миддлом не возьмут? Я Донован Керниган прочитал , с гитом разобрался немного, прошел курс на степике. Я готов или ещё что-то нужно? Работаю сейчас инженером, образование высшее
>>1993464 Чел, я говорю про ААА+ некстген/каррентген. Не мод, не просто поделие, а игру уровня сливок индустрии, уровня ГТА. не Мафии 2/3, не Сенйтс Роу и Слипинг Догс, а самой ГТА. Чтобы каждая деталь, свет, мусо на улице, освещение, цвета, анимацяи и физик(инерция) персонажей на уровне ГТА.
Ясен хуй, это игра на 3+ года разработки с несе. сотнями вовлечённых людей и бюджетом в 10+ млн долларов(скорее даже в неск. десятков миллионов).
>>1993442 Вкатиться невозможно, весь этот хайп вокруг айти поднят продаванами курсов. Конкуренция такая, что все итт скоро пойдут писать код на goвне за еду. Не стоит вскрывать эту тему.
Сап. На го есть какие-то стандарты по микросервисам? Что сейчас модно/используется? Что покурить по этой теме? Сам бэкендер на ноджс, в основном работаю с микросервисной архитектурой. Решил го попробовать, пока что чисто для себя.
>>1992754 >В нормальных языках функции декларируют как возвращаемый тип, так и возможные типы исключений. Т.е. для тебя кроме жабы других языков нет, я правильно понял?
Как думаете, когда уже завезут девиртуализацию интерфейсов? Это же очень очевидная оптимизация, которая автоматически сделает кучу кода быстрее и уберет кучу аллокаций в хипе
>>1996439 Священный грааль с более адекватной обработкой ошибок и шлюхами дженериками, да. По итогу окажется, что все сделали через жепу, потому что НИНУЖНО РРЯЯЯЯ!!1
>>1996443 >По итогу окажется, что все сделали через go-way, потому что программисты должны во главу угла ставить работу с неожиданными и повреждёнными данными, таймаутами и сбоями подключения Поправил тебя.
>>1995583 Так это новая методичка пока не вышла просто, вот все и в смятении. Вот выйдет, напишут вдохновенных гайдлайнов, скажут интерфейсы ваши, дженерики - это от лукавого, не было ооп нормального, неча и начинать. Вот тогда заживем наконец.
>>1996447 Тут главное не ошибиться, где все еще GO-WAY, а где просто шиза свидетелей GO-WAY. Тонкая грань, и судя по отсутствию нормальных енумов и дженериков, создатели пщ ее не особо ощущают.
>>1996451 Я из треда в тред повторяю и повторю ещё раз - дженерики от лукавого, не нужны. Если у тебя часто встречается случай, когда тебе надо иметь одинаковую функцию, но с разными типами данных, тебе надо генерировать код таких функций. Вот какой-то удобный инструмент для генерации (например встроенный подъязык и генератор в составе тулчейна) я бы хотел видеть. Явное лучше неявного, всегда. Но это не значит, что явное нельзя автоматизировать.
>>1996484 >когда тебе надо иметь одинаковую функцию, но с разными типами данных, тебе надо генерировать код таких функций >какой-то удобный инструмент для генерации Называется дженериком, лол. Реализуется на уровне самого языка.
>>1996488 >>1996486 Дженерики неявные, потому что их него сразу получается двоичный код, который нельзя прочитать. В предложенной мной схеме программисту доступен исходник.
Ви знаете, что меня смущает в гошечке? Что ее/го разработали во времена мультикультурализма, дабы средний индус или китаец или негр-трансгендер мог продуктивно пилить тасочки, не стреляя в ногу себе или соседям по кубику.
>>1996612 Го пошел другим путем, он это наоборот поощряет, один из главных принципов го вэй - RY ( Repeat yourself ). И шизики на серьезе утверждают что так правильнее, и лучше повторить тот же код 20 раз, зато явно и наглядно, чтобы не возникало необходимости вчитываться в код.
>>1996618 > Го пошел другим путем, он это наоборот поощряет, один из главных принципов го вэй - RY ( Repeat yourself ). Ебать принцип. Сейчас бы столпы DRY, KISS, SOLID нарушать.
>>1996939 Не доводи до абсурда. Я лишь указал тебе на то, что эти "принципы" - на самом деле лишь рекомендации, и есть ситуации, когда их применение лишь усложняет код. Примеры приводить лень, да и похуй.
>>1997032 Сначала ты такой: ну это всего лишь рекомендации, не буду усложнять код Ты через несколько месяцев: бляяяядь как в это говнище всунуть очередное требование, чтобы оно всё к хуям не развалилось
>>1997032 Для тебя, если есть хороший опыт - вполне может быть. Но транслировать такие идеи - чистое зло, особенно для нубов. Ебанашки начинают повторять это как мантру и хуярить говнокод, потому что еще неспособны самостоятельно оценивать перспективы масштабирования. Каждый сам к этому придет со временем, но до этого лучше воспринимать все эти принципы как обязательные.
>>1996939 Эх, шас бы дебажить импорт импорта класса с обобщенным апи и проверкой данных через 200 функций перевода времени с тихоокеанского в юникс тайм
>>1997334 Использовать : >когда ты во главу угла ставишь работу с неожиданными и повреждёнными данными, таймаутами и сбоями подключения. Не использовать: Когда хочешь невырвиглазный код.
>>1997312 указатели это для компилятора ил иструктур на Си, в остальных случаях ты будешь ограничен ООП-хуетой с разной иерархией одних и тех-же объектов типа поликлиника ЕБланНейм и он должен знать как его нужно лечить, но если ебланнейм пошел туда не лечится а лечить(ремонтировать) поликлинику то другое. Вообщем хуета, и надо роли строить и данные тащить отдельно через указатели
>>1997403 Стопе, я изобрел процедуры вот ведь незадача, жаль ебланы на СИ++ строят дом с крыши и внутри площадь выделяют через хип.вдруг не вместится гипотетический холодильник на 50к литров
Здравствуй двач, на связи джавист (лвл ~мидл), хотел спросить так как решил попробовать для себя этот ваш GO, идеи для пет проекта. У себя на уме банальное e-commerce приложение по типу ( гейт на джаве и пара микросервисов на го, общение через РЕСТ). Заранее благодарю
>>1997344 Я понял, но Go пишут пессимисты. А что, если не получится? А что, если не вернёт ответ? А что, если не существует? А что, если ... С такии настроем надо в тестировщики идти, ей-богу.
>>1997344 А почему они приходят повреждённые, с таймаутами и сбоями? Потому что приходят от сервиса на го. Таким образом, если хотя бы один сервис сделать на го, все взаимодействующие с ним тоже придётся на него переписывать. Язык — раковая опухоль.
А теперь вы такие берете и поясняете, почему я должен использовать не жяву, а именно го для своего супернагруженного 300к пользователей в наносекунду бэкенда.
>>1998504 >А я люблю обмазываться не свежими сртификатами от майкрософт и дрочить. Каждый день я хожу по земле с черным мешком для мусора и собераю в него все сертификаты которые вижу. На два полных мешка целый день уходит...
>>1998504 Шарп сосет в плане экосистемы фреймворков и библиотек. А еще под линуксом жява все равно будет лучше, ибо работает под ним без костылей. Шиндовс, как все мы понимаем, - ос для лохов. >>1998655 Чет не видел достойных сравнений производительности в разных случаях.
Аноны, как вкатиться? Я лет 10 не программировал ибо быдлоадмин и говнодевопс, думаю язык как раз под меня. Проблема в том, что не знаю что вообще написать. Я работаю с кубером и терраформом, которые написаны на go. Может какой-то плагин или оператор написать, но я хз что. Подкиньте идей проектов для новичков в этой области
>>1999004 Больше кода, ниже удобочитаемость, хуже производительность, зоопарк фреймворков, больше костылей, выше вероятность получить непредсказуемое поведение, больше узких мест в архитектуре, требования к проектированию гораздо выше, список можно продолжать.
>>1999078 if err != nil тоби в сраку, архитектор блять. Накодогенерируют себе лычек и выебываются. Ты хоть на го писать пробовал? Без фреймворков бойлерплейта еще больше, чем в жяве, при этом нормальных фреймворков для построения веб крудов не завезли, все какая-то ограниченная хуйня.
>>1999113 >на го писать пробовал Конечно. Единственное, что мне в нём не нравится и что нужно убирать - то, что именованному возвращаемому значению нужен ретёрн. >бойлерплейта еще больше Всё равно меньше >нормальных фреймворков для построения веб крудов не завезли GORM >все какая-то ограниченная хуйня Приведи пример реальных ограничений, которые не преодолеваются самостоятельно в несколько строк.
>>1999254 >Приведи пример Нет аналога спринга, который и жсон распарсит, и в базу сходит, и шедулинг организует, и роутинг предоставит в несколько строк. Или ты сможешь привести пример настолько удобного фреймворка на го? Подозреваю, что либо снова придется все руками пилить, либо подтягивать и изучать 100500 библиотек с непохожими друг на друга апи.
>>1999418 Какие ограничения? У спринга кастомизируемость во все поля, потому что это по сути просто DI контейнер, который в свою очередь обрастает модулями. Ничего на гвозди не прибито, хочешь - накостыль свой велосипед, никто не запрещает.
>>1999463 В масштабном проде важно, чтобы код было легко поддерживать. И только потом его скорость, иначе бы все писали на сях/плюсах. А как ты понимаешь, бойлерплейт не очень хорошо сказывается на простоте поддержки кода.
>>1999505 Ты либо толстишь, либо не понимаешь, что написать хттп сервер на стандартной либе сложнее, чем используя что-то типа echo:
e := echo.New() e.POST("/suction", func(context echo.Context) error { ...celebrate and suck some dick... } e.Start(":8080")
Просто потому, что интерфейсов и бойлерплейта в стандартной либе больше. Соответственно, выше вероятность ошибки и приходится больше кода читать. Магия стреляет в ногу только в специфичных юзкейсах, что довольно редко случается.
>>1999394 Не взлетит, так как он уже никому нахуй не нужен. Ведь дауны на самоподдуве из-за отсутствия фреймов теперь гордятся тем, что сами выбирают или костылят каждый говнокомпонент, и называют это go-way.
В итоге для каждой хуйни есть тысячи разных библиотек, поддержка каждой из них происходит двумя с половиной людьми, все как одна кривые и убогие, развиваются с нулевой скоростью, информации по ним кроме часто скудной официальной документации нету, забрасываются и умирают как мухи по желанию левой пятки автора.
>>1999812 Ну твою ж мать, еще один роутер, обещающий колоссальную производительность. И как мне выбрать самый быстрый, если бенчмарков почти нет? Свои писать? Ну збс теперь, как только спринг на го допишу, сразу займусь бенчмаркингом роутеров.
>>1999563 Потому-что пидрилы не знают что нил только в неинициализированных и динамически созданных полях, а так нулл спокойно заменяется вложеным булем в булю Например я говорю вон там дает памела андерсон помацать за сиськи за углом. Тебя спрашивавют правда? Ты или даешь ссылку на меня или кажешь нулл, так как не знаешь данные мои правдивы или нет.
Хочу сделать пет проект, где придется юзать основные особенности го т е горутины и каналы, но ничего не приходит в голову из хоть сколько то полезного и применимого. Есть какие-нибудь идеи?
>>2001872 Вариации на тему прокси-серверов. Ты запускаешь на локальной машине клиента, а сервере или серверах серверную часть одну или несколько. Между ними идёт трафик по вебсокетам в каком-то закомуфлированном виде.
Стране нужны истинные чеды, а не сойбои кодеры. Хочешь вкатиться в программирование? Прости, но ты уже проиграл в этой гонке, даже не открыв IDE. Дальше тебя ждет только уныние и медленная агония в непрекращающемся потоке говнокода, такая, что ты возопишь от ужаса и все равно в итоге вернешься на верный путь, путь Инженера. Так не проще ли не испытывать свои нервы на прочность?
>>2002829 Наверное, имеется в виду, что он использует именно TS, а не чистый JS, как тот чед справа. Хз, на что это намёк, но хуёва та шутка, которую нужно объяснять.
>>2002801 Самое смешное, что картинка правдива, банальное мужское ретивое помогает разруливать очень сложные ситуации как в организационном плане так и в техническом.
Аноны, поясните за чистый код. Я привык писать код следующим образом: создаю структуру с зависимостями (например, какой-нибудь http-обработчик с репозиторием внутри) и рядом с ней описываю интерфейсы зависимостей, тем самым избавляясь от зависимости от конкретной реализации и от методов, которые моей структуре не нужны. Где-то в другом пакете лежит реализация (одна реализация может быть сразу под несколько интерфейсов). Вопрос: где нужно хранить кастомные ошибки, которые может вернуть метод интерфейса? В месте реализации? Тогда будет существовать зависимость на уровне пакета (т.к пакет с реализацией все равно будет импортирован). В месте объявления интерфейса? Тоже не ок: во-первых, возникнет проблема при необходимости объявить идентичный интерфейс в другом месте; во-вторых, пакет с реализацией начинает зависеть от места его использования. Аналогично со структурами, возвращаемыми методами интерфейса: нормально ли, если они будут находиться в том же пакете, где лежит реализация этого интерфейса? Вообще, стоит ли пытаться избавиться от decoupling'а на уровне пакетов или достаточно сделать это на уровне структур?
>>2004124 Хз, вообще не эксперт в чистом-хуистом коде, и в go-way. Но зачем городить какую то хуету с объявлением интерфейса в месте использования и тд. У тебя есть интерфейс, с какой то одной бизнес функцией, он лежит в отдельном паекте, рядом с этим же интерфейсом лежат структуры с которые он использует, и кастомные ошибки тоже, это часть контракта этого интерфейса. Внутри этого пакета делаешь еще один пакет с реализацией этого функционала и все. Так ты отвязываешься от реализации, и от клиентов которые используют этот интерфейс. В твоих же случаях все просто пиздец как связано и сложно найти концы где какие там интерфейсы реализуются. Опять же, ты нарушаешь этой хуйней solid, а именно принцип единой отвественности, у тебя есть какой то god object который имеет несколько назначений (интерфейсов).
Например если это репоизторий какой-то для доступа к бд, то ты создаешь на каждую бизнес сущность (табличку) отдельный интерфейс репозитория, и отдельную реализацию этого репозитория. Все entity которые возвращает репозиторий лежат рядом с интерфейсом, потому что это часть этого интерфейса
>>2004697 >у тебя есть какой то god object который имеет несколько назначений (интерфейсов)
Необязательно один, это могут быть разные структуры, это просто пример.
>Например если это репоизторий какой-то для доступа к бд, то ты создаешь на каждую бизнес сущность (табличку) отдельный интерфейс репозитория, и отдельную реализацию этого репозитория. Все entity которые возвращает репозиторий лежат рядом с интерфейсом, потому что это часть этого интерфейса
Это нарушает принцип разделения интерфейса. Допустим, я на бизнес-сущность создал один интерфейс репозитория из 7 методов. Он используется несколькими клиентами, и бОльшая часть из них использует всего 2 из 7 методов. А зависит по итогу от всех семи. Именно этого я стараюсь избежать за счет объявления интерфейса в месте использования методов.
П.С. Я в итоге решил свою проблему за счет того, что кладу кастомные ошибки рядом с сущностями, а интерфейсы все так же объявляю по мере и в месте использования. С клиентами (например, http-клиентами) поступил примерно так, как ты описал: создал отдельный пакет с интерфейсом клиента, описал структуры и ошибки и внутри него создал еще один пакет с реализацией.
>>2004750 Единственное, что мне все еще не нравится - это то, что по итогу у меня много конфликтующих имен пакетов, типа internal/handler/user и internal/service/user. Мб я неправильно структурировал проект, конечно. Благо, они совместно используются только в main.
>>2004754 Мне кажется у тебя слишком глубокая вложенность, я бы сделал либо internal/handler/user.go и internal/service/user.go либо internal/user/handler.go и internal/user/service.go (жирным - название пакета)
При том первый вариант лучше, т.к. у тебя локальная область видимости для всех хендлеров позволяет иметь internal/handler/utils.go c неэкспортируемыми общими методами, которые используются всеми хендлерами (например, прочитать реквест в структуру или записать респонс из структуры)
Нужно просто понимать, что такое неймспейс и что там должно быть, а чего - нет. Механизм чтения структуры из io.Reader'а, отдающего json может пригодиться и при чтении конфига, и при работе с очередями, и еще много где. Но вот чтение из http.Request'а content-type и на его основании читать из body в структуру разными способами - уже handler-специфик код и он не должен быть экспортируемым
>>2005679 В моем случае просто помимо user service существуют еще и другие, и у каждого из них есть свои dto и вспомогательные структуры. Не хочется, чтобы все эти вещи лежали в общей куче. Ну и не хочется префиксовать названия структур/констант/функций, если они повторяются для разных сущностей
>>2006483 Так традиционная практика: -Пишем хуйню на языке X -Хуйня получилась кривая, рассказываем какой язык X говно -Переписываем хуйню правильно на язык Y, уже хорошо понимая где мы ранее допускали ошибки -Рассказываем какой язык Y заебатый
Подскажите, как нужно использовать мьютексы в рекурсивных горутинах, которые запускаются внутри хендлеров. Можно ли просто создать переменную мьютекса в хендлере и передавать по ссылке в горутины?
>>2008425 Тем, что они упрощают многопоточный код (по крайней мере, так говорят): проще закинуть сообщение в канал и не думать, что происходит на другой стороне, чем держать в голове, что вот к этому ресурсу доступ будет из множества горутин, а значит надо вешать мьютекс. С другой стороны, если контеншн за ресурс относительно маленький, мьютексы производительнее каналов.
сходите вместе с >>2008425 почитайте про концепции shared memory и message passing, потом про паттерны многопоточных приложений, вспомните про кисс и солид, а потом подумайте о цене поддержки, масштабировании, gracefull shutdown'е, gracefull degradation'е и течке с локами вашей рекурсивной поеботы
да-да, и не забывайте дедушку амдала и на каждом этапе задаваться вопросом "а не хуйню ли я делаю"
нахуй я все это пишу, все равно же никто прислушиваться не станет
>>2008607 Баззворд на баззворде, а по делу нихуя. Иногда проще навесить лок, чем ебаться с каналами-карнавалами. В той же стандартной либе локи используются.
>>2010329 Обычно когда начинаешь учить другой язык, на предыдущий хуй забиваешь (из моего опыта), только если с первым ты не связан рабскими рабочими узами.
Вопрос к оптимизаторам. Есть серверное приложение, с каждым новым подключением клиента, спавнится 3 горутины, стоит ли сделать отдельный пулл горутин, чтобы не спавнить их заново при каждом подключении? Подключений может быть очень много в единицу времени
>>2010377 А тебе не похуй? Горутин можешь хоть миллион наспавнить, там динамический стек, я не думаю, что у тебя там сотни тысяч запросов в секунду обрабатываются. Главное проконтролируй, что они не текут (т.е. не ломаются и не остаются в памяти). Пул горутин - это уже скорее воркеры различные, которые в фоне просто висят.
>>2010595 А если и сотни тысяч? Прям щас работаю над проектом, где общая нагрузка где-то 300к рпс. И вот как туда прикручивать горутины, чтоб не наебнулось?
Всем кулити. Мне 25, вкатываюсь в тестирование. Собираюсь поработать тестером годик-два и параллельно хочу для себя начать изучать программирование с нуля. Дело в том, что я учился в вузе на технаря, проходил и плюсы, и шарп, и джаву, и питон, но из-за того что мы использовали языки для программирования математических задач, на 5-6 паре программирования каждого ЯП я бросал это дело. Сейчас знаю базовый синтаксис многих языков, условия, циклы, работу с массивами и т.д., знаю как создать и использовать функции. С ООП не работал и по сути не знаю что это такое даже. Ну как, знаю, но не в правильном представлении использования ООП. Короче, хочу развиваться в вэбе в бэке. Смотрю сейчас в стороны: пхп + ларавель, джс + нода, го. Склоняюсь больше к го, т.к. интересен его синтаксис. Есть пара вопросов к вам - гуру. 1. Как первый ЯП выбирать Го это совсем хуёво? Я имею в виду изучать само программирование с помощью этого языка. 2. Вкатываться после тестера в го разрабы в 26-27 лет поздно или нормально? 3. Какая реальная вилка по зп на джуна го с техническим бэком (ну помимо технической хуйни, кстати, я успел поработать на складе, заводе и в вузе, и в логистике, но в резюме не пишу об этом и стараюсь об этом не говорить)
>>1996612 >Для индусов надо делать язык, в котором будет запрещена копипаста, иначе они всё равно наговнякают индусокода Любой язык с форматированием кода пробелами. Я не смог в nim lang копипастить. Всё сбивается, вложенные блоки оказываются вложены не туда, куда хотел. Nim lang - язык в котором приходится писать самому!
>>2011932 можно через database/sql, можно взять орм - например, ent если не хочется орм, но и впадлу писать запросы руками - то можешь взять squirrel или dbr
>>2011375 > Склоняюсь больше к го, т.к. интересен его синтаксис. Странная мотивация, на синтаксис должно быть пофиг, язык это же просто инструмент для решения задач > 1. Как первый ЯП выбирать Го это совсем хуёво? Я имею в виду изучать само программирование с помощью этого языка. Норм, но наверное шарп лучше был бы, или джава, или даже тайпскрипт как вариант (я сам бек пишу на ноде/тс в том числе, помимо го) > 2. Вкатываться после тестера в го разрабы в 26-27 лет поздно или нормально? Я бы сразу в разрабы шел, зачем время терять в тестировании? > 3. Какая реальная вилка по зп на джуна го с техническим бэком Москва 60-120к, остальные города 40-80к, остальной постссср кроме России хз
>>2012271 >Странная мотивация, на синтаксис должно быть пофиг, язык это же просто инструмент для решения задач
Ну я бы не сказал. Мне чисто эстетически приятнее читать код на го, чем на какой-нибудь джаве/пхп. Мне проще его воспринимать - это неплохо так влияет на эффективность моей работы.
>>2010605 Не может у тебя быть такого проекта. Если бы была такая нагрузка - были бы реплики, разделяющие нагрузку. Один процесс не справится с такой нагрузкой, если это не хеллоуворлд.
>>2012815 Я же сказал - общая нагрузка. Естественно, там сильно больше одного инстанса. Но написано это все на жяве, и интересно, есть ли смысл переписывать рпсную часть на го и выносить в отдельный компонент, будет ли прирост? inb4: все индивидуально и надо замерять, где узкие места, а не заниматься хуйней.
>>2012668 Мне вообще по синтаксису тайпскрипт приятнее всего, на го конструкции иногда слишком громоздкие получаются + бойлерплейт и всратая обработка ошибок
>>2013242 Потому что это очередное поделие от криворуких обезьян-олимпиадников из жид брейнс. Просто пара примеров, чтобы понимать примерный уровень: 1. Я использовал как интеллиж, так и голанд, и в обоих продуктах одна и та же проблема: периодически они перестают понимать импорты и видеть модули. Иногда решается очисткой кэша, иногда приходится сносить репозиторий и ставить заново. И это тянется уже несколько лет, несколько лет эти пидарасы не могут пофиксить такой явный баг, который, блять, еще и кочует из продукта в продукт. 2. Не знаю насчет голанда, но интеллиж течет, как сука: нельзя оставлять открытым более чем на неделю, иначе сожрет всю память. Я уж не знаю, как они умудрились получить утечки памяти в поделии на жяве, где верхний предел конфигурируется на уровне жвм, но они блять справились. 3. Охуительный юзер экспириенс. Ебучий баннер на старте, который всегда показывается поверх остальных окон. И мало того, все твои закрытые проекты на старте вместо тихого открытия в фоне, открываются в окнах, каждое из которых дергает фокус на себя, перекрывая прочие окна и просто не давая тебе заниматься другими делами, пока это говно грузится.
>>2013576 Ой да ну нахуй. Я вместе с vscode начинал знакомство с го, не представляешь сколько он мне нервов и времени сожрал. Пока написал хелловорд, я успел столкнуться с: -Бесконечным сохранением файла -Через 10 секунд после запуска вскода, просто пропадало всё автодополнение -Каким-то хуем вскод через раз ругался на импорт пакета "fmt", типо он не используется. При том что я юзал fmt.printLn и все компилилось -Вообще не понимаю как, но этот сраный "редактор кода" несколько раз протекал и загружал всю систему, не мог в браузере сидеть. С мощными и громоздкими IDE от жидов такого ни разу не было, что характерно.
Хотя, для шарпа я всегда с удовольствием его использовал, никаких проблем ни разу не было. Так что всё же не он виновник перечисленных проблем, это всё кривой extension. Полюбил go только после установки goland.
Это во всех языках со статической типизацией, или только в go при сравнении через "==" двух численных переменных разных типов ( например int и uint64 ), но с одинаковым значением, возвращается false?
>>2014992 >Не пизди. Сейчас попробовал в go playground это проделать, действительно при сравнении int и uint64 компилятор ругается. Но я не один в один с такой проблемой столкнулся, у меня была переменная "a" типа uint64, со значением 0, которое задавалось извне. Теперь самое интересное: a == 0 возвращало false, a == uint64(0) возвращало true. А если явно перед сравнением задать a = 0, то a == 0 тоже возвращал true. Очень странно...
>>2015349 путь_к_функции.имя_функции() - это статический вызов в любом языке где есть пакеты Только в некоторых путь к стандартной либе неявно добавляется, в некоторых можно статически импортировать функцию, а некоторые го
>>2016174 Или ты про main? Это точка входа в программу, с нее начинается исполнение кода, в отличии от питона и жс, где код исполняется сразу сверху файла
>>2016309 И тем забавнее твоя аргументация, ведь на го не получится построить достаточно высокоуровневые абстракции, без которых ни одна большая кодобаза не обходится. Хотя бы просто из-за отсутствия дженериков. А теперь марш и дальше пилить микросервисы.
>>2016789 >>2016805 Все-таки ООП. Инкапсуляция представлена типами и их методами, полиморфизм - интерфейсами, а наследование, в отличие от других языков, - композицией. Ничего не мешает создать тип, наследующий свойства и методы другого типа, просто включив этот тип в объявление структуры. Тут особо умные возразят, что это нихуя не труЪ наследование, потому что отношение между сущностями не "является", а "содержит" (типа как автомобиль состоит из множества деталей, не являясь ни одной из них), но пошли они нахуй, ибо композиция позволяет получить то же поведение, что дает классическое наследование, но при этом более гибко, не связывая жестко сущности между собой. Так что я бы сказал, что в го у нас ООП на стероидах.
>>2016903 Согласен с каждым словом, вот только большинство гошников ужасно плюются когда такое заявляешь, при этом возразить ничего не могут. Наверное у них или детские травмы от абстрактных абстракций над абстракциями из прошлых языков, или они просто не знают что такое ООП, а думают что "ну это как в джаве епты"
>>2017046 Во-первых, зачем? Используй интерфейсы, если тебе нужна функция, ожидающая какое-то общее для нескольких сущностей поведение. Во-вторых, если тебе все-таки это нужно, передай вложенную структуру.
>>1997704 Люди с тревожно-депрессивным расстройством на нем пишут. Или начинают писать нормальные, а выходят уже с приобретенным F41.2 Как и на крестах, кстати. Мимо крестодебил с F41.2, даже от гомоармии откосил
>>2017411 Но итераторы как раз для циклов используются везде. Учитывая что в голанге утиная типизация для интерфейсов итераторы как раз подходят под семантику языка.
>>2017510 Может это ты ебанулся? >Растобляди завидуют, сектантская запарта не переваривает. Это в ОП-посте написано. Ещё раз спрашиваю: что такое сектанская запарта?
Какой же го охуенный, воистину лучший язык. Раньше, когда только учил синтаксис, делал всякие задачки, смотрел на чужие проекты, он сам и go-way мне ну очень во многих моментах не нравился. Но чем-то сука привлекал. Зато как только начал на нем писать более-менее настоящий проект, он начал мне сразу же люто доставлять. И нету ничего страшного в его специфичной обработке ошибок и прочих непривычных для других языков вещах. Алсо, больше всего меня отталкивало отсутствие каких-то единых принятых инструментов, фреймворков с единственной расово верной структурой проекта, подходами и т.д., зато как только прочувствовал вкус свободы, сразу же все эти вещи стали мне отвратны. Вот такие то дела. От ненависти до любви один шаг.
>>2018169 > он сам и go-way мне ну очень во многих моментах не нравился. Но чем-то сука привлекал Когда-то наткнулся на понятие "притягивающее уродство", оно как нельзя лучше описывает такое. Это как ехать в метро, увидеть мужика с лицом странной формы и странным взглядом и пялиться на него исподтишка всю дорогу.
>>2019151 Как-то так, https://play.golang.org/p/QuWfMqU2gq- Контекст нужен чтобы не допускать утечку горутин, за этим нужно следить. Но зато мы размазываем наши вычисления по нескольким тредам, что может быть полезно для тяжелых задач
Всем привет, хочу вкатится в go, ибо мне говорили, что go - один из лучших языков программирования для back-end и devops челиков.
Посоветуйте, с чего начать можно, тип, я видел в треде php небольшой интерактивный курс, решая который ты повышаешь свой скилл (как я понял, это авторский курс анона), а есть ли что-то подобное для go, чтобы было примерно так-же (интерактивный курс), а не только гайды и прочее
Кто-нибудь пробовал (-buildmode=0) плагины совместить с CGO_ENABLED=0, т.е. чтобы рантайм был общим для приложения и плагинов, а-то как-то, блядь, плагины по 50 мегабайт - это уже слишком. Пробовал когда-то не так уж давно, но нихуя не вышло, т.е. если плагинов нет, то всё збс, главное приложение маленького объема и работает, а с плагинами - хуй.
>>2021981 Девопс - это всякая админская скриптота, чтобы автоматизировать сборку дистрибутивов приложений и деплой на сервера. Пишут обычно на баше и питоне.
>>1986204 (OP) Аноны, поясните за работу GC в сишном коде. Когда я подгружаю DLL на Go в приложение на C и начинаю работать с памятью этого приложения из DLL, то насколько далеко лезет GC? Будет ли он сканить всю память процесса? Больше всего интересует задержка GC. Будет ли она околонулевая, если в DLL не будет аллокаций памяти? Или GC будет всю кучу сканить и ложиться на 10 мс?
>>2029269 1) Проверяем, является ли число отрицательным 2) Если да - рекурсивно вызываем сами себя и к результату добавляем "i", возвращаем 3) Если нет - берем квадратный корень и приводим его результат к строке
>>2030002 Можно, https://github.com/cheekybits/genny так и работает. Вопрос только в том, что это требует дополнительной внешней тулзы, а так же нет нормального способа прикрутить к такой реализации constraint'ы. А значит есть возможность нагенерить некомпилируемого кода, что не есть хорошо.
>>2030867 Что ты повторяешь про васянов как попугай? Разумеется, должен быть единственно верный официальный инструмент для генерации кода, возможно основанный на одном из васяподелий. Вопрос не в васянстве, а в подходе
>>2031718 >>2031609 А вообще Го - не самый лучший язык для начинающих, так как материала для ламеров почти нет. Начинай с С++, на ютубе есть годный плейлист от Гоши Дударя, потом если захочешь катись в Го. Уверен, что ты ещё не 30-летий лоб, так что времени тебе хватит, ещё успеешь.
>>2031720 >С++ >от Гоши Дударя Какие же зумеры дегенераты, просто пиздец. Предпочесть мутные видеокурсы от ютубного эксперта по всему нормальных книжкам.
>>2031921 Долбоёб, ты действительно считаешь, что тот анон - полностью обнадеженный, пытающийся впопыхах вкатиться в эту сферу, будет забивать себе мозги Страуструпом? Ты хочешь сказать, что ему ещё прийдется дополнительно превозмогать и читать тех. литературу? Пускай поверхностно пройдется по всему этому делу и поймет, надо ли оно ему.
>>2032045 Ну я читал его книгу и смотрел Тимофея на ютубе, и могу смело сказать что кресты это пиздос какой уродливый язык, учить по нему прогрество лишнее забивание головы старым нечитабельным говном
Вписал в конфиге postgre "datestyle = 'iso, dmy'". Когда пишу прямо в консоли запросы, все работает, могу поля с типом date заполнять в формате типа "22.07.2021". Вот только когда пытаюсь аналогичное провернуть через го ( стандартная библиотека database/sql, драйвер lib/pq ), он мне рыгает ошибку и дальше ожидает даты формата mm.dd.yyyy. ЧЗХ? Куда мне вообще копать?
>>2048852 Двачую, я с бекенда на ноде, с джаваскрипта быстро переучился на го, работать легче и зарплата повысилась неплохо, хотя я и до этого нормально так зарабатывал.
>>2049911 Ты менял компанию, чтобы перейти на го? Если да, то какое к тебе было отношение? У тебя ж по сути нет продакшен опыта с го, так что с этой стороны ты джун, хотя опыт разработки в целом есть.
>>2049989 Не менял, перешёл в другую команду внутри своей компании, проработал чуть больше полугода, потом в итоге в резюме написал полтора года опыта на го, то есть включил туда весь срок работы в этой компании.
>>2049989 Я переходил с пхп на го без коммерческого опыта на го - довольно много работодателей готовы со мной были пообщаться, несмотря на это. Просто спрашивали, что я делал на прошлых местах, какие задачи решал, какими инструментами пользовался. 2 или 3 оффера я получил из 6-7 собесов. Так что можно не сильно переживать на этот счет - как к джуну адекватные конторы к тебе точно не будут относиться.
>>2052447 Что такое "локалка пыхи" и зачем она тебе при попытке запустить го сервер? Локально это запускается через go run ./path/to/cmd/server/main.go