Cамого МУЖЕСТВЕННОГО в мире языка Go тред №21 /go/
Go или Golang — компилируемый язык программирования от создателей таких шедевров, как UTF–8, язык С, UNIX, Plan9 и других. Go поддерживает типобезопасность, богатую и универсальную стандартную библиотеку функций и инновационные семантики одновременности: все то, что мы в индустрии называем concurrency и parallelism. На сегодня язык Go является маяком стабильности, прагматичности, де факто представляет из себя стандарт в мире бэкенд–микросервисов и серверного оркестрирования.
Обсуждаем язык, смеемся с залетных крестоносцев, обсуждаем почему нам не нужны дженерики, наследование и эксепшены, по каждому багу находим трехстраничный пост в официальном блоге Go, объясняющий почему это на самом деле фича, ждем, когда нам завезут дженерики, наследование и эксепшены.
Растобляди завидуют, сектантская запарта не переваривает.
>>2510725 (OP) >Небольшой канал треда: t.me/golang2ch и даже живой Он слишком живой. Если его читать (тем более участвовать), кто там куда съездил, кто чё купил, кто какую хуйню сделал - на работу времени не останется.
>>2512285 В итоге unchecked победили и используются повсеместно, а легаси с checked ловят и оборачивают в unchecked. В других языках, где есть эксепшены, нет unchecked вообще.
Парни, как вообще можно попасть на позицию джуна с го, если всем нужен опыт работы, а вакансий на позицию стажера без опыта в том же спб нема. Пытался найти удаленку, но много кто посылал куда подальше, ибо я из рф... странная тема.
>>2514094 Через другие языки. То же касается и ноды. Работаешь 1-2 года на пайтоне/пхп/джаве/шарпе, параллельно качаешь го, после года работы параллельно работе ищешь работу на го. Либо тех. вышку имеешь и вкатываешься легчайше в любой стек, хоть в хаскель.
>>2510725 (OP) Короче, есть этот ваш пакаж, назовем его api, в нем есть файл, представим, что называется он testoviykal.go. Вопрос: можно ли внутри текущего (api) пакажа заалиасить конкретно этот файл?
>>2514438 на отдельные файлы ссылаться нельзя, гошка работает с пакетами, а пакет - это все файлики в папке. хз что ты хочешь вообще. либо уноси файл в отдельный пакет, либо наворачивай все функции из файла как методы на структе, либо юзай билд теги/суффиксы платформы, чтобы при билде выбрать файл.
Хочу написать на Go скрипт, который будет до определённого момента грузить ОЗУ, например на +50%. не более. Как это можно сделать, в сторону какого пакета смотреть?
Какой подход более идеоматичен при работе с коллекциями в го? Бросать еррор когда коллекция пустая, либо же сделать отдельный метод IsEmpty, как в жабе?
>>2510725 (OP) Что вообще от джуна-стажера го щас требуют? На текущей работе сетевик, по фану написал CRM для внутреннего пользования. JWT аутентификация, рест апи, асинхронные задачи типа отправки на печать, почты, етц. Сойдет за пет прожект чтобы к резюме прикладывать? Хуй знает че еще такого надо уметь, может архитектуру/паттерны надрочить, или с grpc че нить сделать
>>2517172 > Почему не сделали конструкторы для классов структур? Потому что Go - не объектно-ориентированный язык. а что-то вроде высокоуровневой сишки. > Почему не сделали встроенный set? До определённого времени не было дженериков, и предлагалось использовать map. А теперь хуй кто будет вводить кейворд set, сразу всё легаси перестанет компилироваться, слишком уж популярное имя для идентификаторов.
>>2517179 >а что-то вроде высокоуровневой сишки Ну ниудобна жи! С комфортом бизнес-логику не поделать так же как на пистоне или жабе. Есть примеры классических приложений (не инструментов) с открытым кодом? Хотя бы что-то вроде магазина или борды.
>>2517184 > С комфортом бизнес-логику не поделать так же как на пистоне или жабе А здесь любят страдать, срут глобальными переменными, пишут велосипеды и кодогенераторы для добавления сахара, а большие приложения здесь писать очень больно, поэтому микросервисы здесь не столько современный подход, сколько вынужденная мера. > Хотя бы что-то вроде магазина или борды Ими весь гитхаб завален. Например, https://github.com/DexterHaslem/dexchan
>>2517172 Пару лет назад задался тем же вопросом по поводу сетов, тоже перекатывался с питона. Сейчас уже не понимаю, зачем нужен условный сет/хип/кью в стд либе, при желании реализуется за 5 мин, а нужно раз в месяц.
Как в 2022 делать go run программа.go если программа из кучи модулей? Нашел на гитхабе кучку простых примеров, но ничего не запускается. Я понимаю, что есть современный способ, когда через go mod init создаешь файлики, go mod get качаешь все что нужно, но
можно без этой ебли?
Я просто хочу пару примеров погонять, а не устраиваться в Wildberries.
Можно использовать gopath. Но вообще go-модули - это и есть вариант без ебли + это единственный верный способ организации программ на го. Подход с gopath сейчас используется только в легаси
>>2517319 >Сейчас уже не понимаю, зачем нужен условный сет/хип/кью в стд либе, при желании реализуется за 5 мин, а нужно раз в месяц. То есть мне надо из проекта в проект таскать свой пакет с коллекциями, как диды которые с микрухой ебуться?
>>2517714 в рил ворлд проектах это не нужно. ну ладно раз в 3 месяца будет у вас новый сервис заводиться и с шансом 90% там даже очередь не нужна будет, а если ты будешь 2N в N оптимизировать затаскивая недефолтные коллекции тебя отхуесосят на ревью
>>2517728 >а если ты будешь 2N в N оптимизировать затаскивая недефолтные коллекции тебя отхуесосят на ревью Так разве го не для этого нужен, что бы байты быстро педалить?
>>2517714 В Go есть поддержка сторонних либ, ничего своего таскать не надо. Устанавливаешь готовую либу, где реализованы десятки коллекций на все случаи жизни, и можешь писать почти как на нормальном языке.
Хочу соорудить в максимально ненапряжном стиле сетевой эмулятор устройств. Как это сделать на Go? Go я выбираю исключительно ради легковесности горутин и логики эмуляции.
Изображать я буду обмен по TCP. Но не неплохо бы еще SNMP.
Может быть docker-драйвер слабать? Или TAP-устройство?
Какие библиотеки или полуготовые проекты посмотреть?
Я смотреть google gvisor - оче сложно для меня и ничего не готово. Я смотрел google packet - там нет tcp-стека полностью. Можно только пассивно наблюдать за трафиковм
Вкатился в этот ваш го. Расскажите как вы живете без перегрузки методов? про хуевую обработку ошибок и только недавно добавленные дженерики промолчу...
Соратники, а как вы свои микросервисы в докер заворачиваете? Билдите внутри контейнера или же локально у себя сбилдили и закидываете в контейнер только лишь бинарник? с 1 стороны можно прямо маленькие образы делать( но у меня какая-то хуйня exec /app/main: exec format error), подозреваю надо билдить как-то по хитрому, это при попытке закинуть в контейнер бинарник сбилженный под макос(юникс)
>>2521106 Охуеть, даже на польском есть версия, хотя в Польше вакансии не для сильных мидлов-сениоров просто нет. Зачем они делали ее я не знаю капчю из Польски
>>2510725 (OP) Почему у вас считается нормальным импорт модулей для сайд эффектов? Читаю доку по gRPC, что бы подключить сжатие на стороне сервера нужно импортировать gzip и никуда не указавать его дальше. Хотя бы при инициализации сервера через опции можно было бы сделать.
>>2522305 Ты должен вернуть тот же тип что будет указан в дженерике, но ты возвращаешь string. Прдеставь что у тебя тип дженерика будет int как туда можно впихнуть в строку? any означает что тип дженерика может быть любым, а не то что он возвращает любой тип
>>2510725 (OP) Как на Go написать identity function? Это функция, которая возвращает свой аргумент. При чем аргументом может быть любой тип, в том числе функция. На JS это выглядит так
const identity = (x) => x;
Типизация Go требует указания типов аргумента и возвращаемого значения. Есть какие то хаки чтобы это обойти, чтобы функция принимала аргумент любого типа и возвращала его?
>>2523430 Спасибо за пример. Только не понял зачем 2 функции, identity и identity_interface? Как это называется T, чтобы почитать? Гуглится плохо. Я пока нуб в Go, хотел только понять как можно добиться параметрического полиморфизма.
Короче, изучаю этот ваш Goи столкнулся с одной проблемой
Создал две структуры и две функции. Соответственно функцию main и другую, функцию, которая выполняет запись в строку, при выполнении определённых действий.
В функции main задал ключи-значения структурам.
Собственно две проблемы: 1) Вне функции main я не могу использовать WriteStting(), гугул говорит, что это из-за того, что WriteString() работает в функции, которая имеет права записи. Как дать права записи второй функции? 2) Если нельзя сделать первое, то как мне передать из одной локальной переменной значение в переменную, которая находится в другой функции?
>>2523772 >Базовый тип, от которого наследуются все остальные. Где нибудь об этом пишут? Дай пожалуйста ссылку, а то выебся искать. Не гуглится T, не гуглится базовый тип. Где ты об этом читал?
>>2510725 (OP) Аноны, опишите свою работу. Чем вы конкретно занимаетесь на работе (понятным языком). С какими проблемами сталкиваетесь? И КАКИЕ ТЕХНОЛОГИИ ВЫ ПОСТОЯННО ИСПОЛЬЗУЕТЕ?
>>2523772 >Базовый тип, от которого наследуются все остальные >>2523839 >"дженерики golang" 1 ссылка в гугле По этой ссылке про T почти ничего нет. Ни слова про то, что это некий базовый тип. Что за ебанутый язык, почему нет внятного полного описания этой хуйни?
>>2524293 да просто вопрос уровня "где можно прочитать что такое x в математике?" T это тупа принятое название для первого/единственного типа-параметра. пост про "базовый тип" это шутка про джаву (я надеюсь). если тебе нужно внятное описание, то можешь спек читать https://go.dev/ref/spec#Type_parameter_declarations всё остальное, включая сами сорсы гошки, это просто пережеванный разными людьми и выплюнутый в определенной физической форме спек
>>2524305 в гошке это и так можно было сделать, например объявить произвольный алиас для типа type T = int и возвращать T вместо int. чисто синтактически типы-параметры примерно похоже себя ведут. если на пальцах об асфальт, то можешь это рассматривать как алиас в скоупе функции, но конкретный тип, который алиасится, определяется при инстанциации.
>>2524319 >Можно объявлять пользовательские типы? да, в го можно объявлять пользовательские типы. это выгодно отличает го от языков, где это нельзя делать >Так type all = any можно да
>>2524351 >можно ML пилить ML - это язык программирования. Родоначальник целого семейства языков и множества фич. Python своим синтаксисом обязан языку ML. Поэтому пиши Machine Learning.
>Даже на православном JS можно ML пилить И как это вообще относится к языку? Можно подумать JS поддерживает machine learning из stdlib. Запилят либы для Go и на нем можно будет юзать machine learning.
>это какое-то кустарное поделие для узких задач Не кустарнее JS и PHP, но да, для узких задач, сети и конкурентность.
>>2524298 >>2524211 >Чем вы конкретно занимаетесь на работе (понятным языком) микросервисы... ну грубо говоря есть два вида задач - технические и продуктовые. продуктовые это уровня - есть шина данных (например какой-то топик в kafka или NATS) и сервис, который умеет отправлять пуши пользователям. нужно запилить сервис, который будет слушать шину и при получении определенных событий ходить в rpc ручку сервиса пушей, чтобы отправить эти пуши. а еще нужно запилить дедупликацию с БД/редисом, чтобы одинаковый пуш дважды не отправить. плюс возможно после получения события надо сначала идти в какие-то другие сервисы, чтобы взять нужную инфу для пуша. - или нужно начать отдавать какие-то данные на фронт, т.к. мы хотим пользователям больше инфы показывать, например граф движения посылки. для этого нужно в сервис с апишкой допилить поход в сервис статусов за этой инфой. - или так как у нас SSR, то всякие правки текстов тоже на бэкендеров падают. и технические задачи - это уровня оптимизировать запрос в БД или запилить новую ручку для Х, которая возвращает меньше инфы, но работает быстрее, дергает более легкие ручки других сервисов или вообще не дергает, и переключить потребителей на неё, чтобы подготовиться к росту нагрузки на следующие полгода. вместе со этим нужно мониторить и дежурить по сервисам своей команды. >С какими проблемами сталкиваетесь? - нужно получить данные из другого сервиса, но он не может выдержать нагрузку, которая планируется. там ручка не батчовая/нихуя не оптимизирована/гоняет сложный запрос в БД - другая команда начала ходить в наш сервис со сложными фильтрами, и наша БД сдохла из-за отсутствия нужного индекса для такого фильтра - нужно сделать фичу в сервисе другой команды. приходится в их код погружаться и договариваться о том, как ты это сделаешь - нужно сделать фичу, которая требует еще нетривиальных правок на фронте, а в команде нет фронтендеров >И КАКИЕ ТЕХНОЛОГИИ ВЫ ПОСТОЯННО ИСПОЛЬЗУЕТЕ? инструменты - вскод, golangci-lint, gofumpt, mockgen платформа - docker, minikube. на всех моих работках как минимум CI был в докере. ну и в каждом первом сервисе постгрес есть. иногда еще редис в добавок, или монга вместо пг. и очевидно баш: ты делаешь новый сервис, пишешь юнит-тесты, мигрируешь нужные для старта данные в БД, примерно прикинул РТ и нагрузку, но у тебя нихуя нет пруфов по приблизительным RT/SR, которые сервис будет реально выдавать. с башем можно тупо за 10 минут написать скрипт, который для каждой реальной строчки из БД дернет твою ручку, чтобы хоть какую-нибудь статистику собрать и понять насколько ты обосрался
>>2510725 (OP) Сап, goвнач. Работаю с голангом полгода на проде. У нас типо хайлоад и микросервисы, всё деплоится в AWS через docker-compose. Довольно большое и запутанное приложение, но дёргается через POST метод и там дохуища логики внутри. Есть ещё приложение на гошке, там всего три эндпоинта, которые лезут в другую базу и возвращают результат для мобильного API, написано с GORM, по-сути, там простые круды.
Ну и в чём вопрос. А нормальные компании как испрользуют голанг? Что сейчас вообще делают на гошке? Мне кажется, наши ебантяи неправильно используют говноланг.
>>2524560 Почему я спрашиваю? Да меня подзаебал проект, я бы куда-нибудь перешёл и уволился. Но не знаю чем сейчас go живёт, что на нём востребовано. Зарплата очень низкая, на любом другом языке в разы больше платят
Вот есть > var symbol int32 = 'c' > fmt.Println(string(symbol))
Значит symbol преобразовывается: 'c' as int32 -> 99 as int32 -> string(99 as int32) -> 'c' ? Тупой вопрос, но я правильно понимаю что на вход в string подается два значения - число и его тип? А далее так как это метод строки - он выдает строку изходя из своих таблиц?
>>2524356 >ML - это язык программирования. Родоначальник целого семейства языков и множества фич. Python своим синтаксисом обязан языку ML. Поэтому пиши Machine Learning. Я его прекрасно понял, контекста достаточно. Выражение "делать ML" уже стопроцентно говорит, что речь не о ЯП.
>>2524585 >на вход в string подается два значения - число и его тип когда компилятор видит, что ты передаешь rune в string(), он впихивает конверсию к utf-8 репрезентации. >А далее так как это метод строки - он выдает строку изходя из своих таблиц но тут нет ни одного вызова метода. и у строк методов никаких нет
>>2524662 Такая хуйня нерепрезентабельна, нужно показывать облачко с количеством вакух и количество опыта. На говяхе джунов и недомидлов практически нет, как и на элексире.
>>2524809 так ты создал go.mod или нет? Это реально пачка файлов с package main, где все имена пересекаются (то есть, наиболее удобный способ поиграться с мелкими примерами) ?
>>2524251 ДЖСОНОМЕШАЛКА МЕШАЕТ ДЖСОН @ БРИГАДА РАЗРАБОВ ЖРЁТ САМОГОН @ ТИМЛИД ОЛОЛОЕВ В ДОСКУ ПЬЯН @ НАПЕЧАТАЛ ОН DROP DATABASE @ ФРОНТЕНДЕР СТЕПАН ENTER НАЖАЛ @ НАХУЙ ВЕСЬ ПРОД ПОТЁРЛИ РАЗОМ @ БРИГАДА РАЗРАБОВ ЖРЁТ САМОГОН @ В ДЖСОНОМЕШАЛКЕ КРОВАВЫЙ РАСТВОР @ ТЕСТО С МЯСОМ ХОРОШО @ ЗДЕСЬ УЖЕ ПЕРЕМЕШАЛОСЬ @ ЭТИ ВКУСНЫМ ПИРОГОМ @ ВСЕ КЛИЕНТЫ ОБЪЕДАЛИСЬ @ ДЖСОНОМЕШАЛКА - АЛКОГОЛИЗМ @ ДЖСОНОМЕШАЛКА - КАНИБАЛИЗМ
>>2524803 Это реальность. Медианная зп на питоне в рф равна 140 тысяч рублей. >А по голангу почти нет вакансий Как и конкурентов. В питоне соотношение вакансии/конкуренты гораздо хуже (у питона оно в принципе самое хуёвое, хуже может быть разве что у жс). Ты откуда вылез вообще, я не верю что человек хоть какое-то отношение к рынку айти имеющий может такую дичь писать.
>>2524901 >Ты откуда вылез вообще Я два года писал на Python, потом три года на JS, сейчас вот полгода на golang работаю в коммерческой компании. По инсайду, golang уже мёртв и нет смысла продолжать его учить
>>2524957 Ruby это чисто американская фишка, и он вполне ещё живой. А golang это хайповый высер google, который нигде, кроме google и не нужен. Всё, что я читаю о "популярности голанга" это мирф от инфоцыганов. По скорости golang уступает даже C#. Прумиронк.
>>2524941 >>2524961 >>2525020 Толсто. Go и Ruby не отличаются по зарплате. А вакансий для Go в РФ больше в 3 раза. И Go не игрушка, а промышленный язык программирования. Пошел бы ты играть в свою песочницу.
>>2524961 >По скорости golang уступает даже C# fasthttp довольно быстрый. Кстати говоря, techempower тесты для шарпа оказались хитрой подделкой, а не тестами фреймворка, поэтому тот факт, что asp.net входит в топ-10 по производительности, оказался не более чем маркетинговым буллщитом
В PHPStorm если функция бросает исключение, она будет подсвечена. Можно ли добиться того же для panic в go? Как вы вообще определяете свалится ли библиотечная функция в панику? Просто ищете по исходниакм?
>>2529637 Закономерно, разрабы на зумерском языке в основном социобляди и на токсичном дваче им не уютно. Страшно представить, что в чатах по JS и петухону происходит, раз они даже здесь срут 100500 постов в день.
>>2529817 На токсичном дваче неуютно из-за лахтоботов, модерации от сотрудников псевдочастной компании VK и товарищей майоров, которые захаживают и в тематику
>>2531177 Не поработал с аналогами? Это как вообще? Путь разработки на Go такой: вкатываешься в другой язык, дорастаешь там до миддла, учишь синтаксис Go и вкатываешься, если обнаружил местный велосипедный фреймворк, используешь его, иначе пишешь свой.
Решил я потыкать ваш язык, и чет уже охуеваю. Есть у меня один микросервис на ноде, который кафку читает, решил я его переписать на го по приколу. Кафка защищена сертами. Переношу рабочие серты в pem формате и ловлю ошибку.
Объясните пожалуйста, почему последний элемент никогда не читается горутиной? Знаю, что это всратое использование каналов, я в данном примере просто надрачиваюсь.
>>2532211 Уже разобрался. close тут не при чем, до него даже не доходит. Главная горутина завершает работу сразу после помещения последнего элемента в канал - логично, что программа закрывается и дочерняя горутина не успевает.
>>2532591 > По-моему ты хуйню написал. Все так. Я только учу язык и специально в рамках изучения смотрел, что будет, если писать в канал из главной горутины. А причем тут close конкретно в моем примере, я не понял. Если мы пишем в канал в дочерней горутине, то ясно, что без нее программа не завершится. Если говорить про изначальный пример, то он там не оказывает никакого влияния на работу если я правильно понимаю.
>>2532488 канал же без буфера. главная горутина блочится на отправке до того как придет читатель из канала. когда приходит читатель, значение копируется напрямую со стека отправляющей горутины в стек читающей. в сам канал значение не помещается.
>>2532161 Я тут понял, что мне тоже следует разобраться с подобной же херней.
Есть простая утилита, которая должна останавливаться по ctrl-c или по юникс-сигналу. Я делаю на все доступные каналы close, но потоки не всегда успевают корректно завершиться.
Прочитал на stack overflow, что все используют sync.Waitgroup. Но это по-моему как-то некрасиво выглядит.
как следует спроектировать работу с каналами в моем случае?
>>2533116 Ну, код не расскажу, а принцип такой. Берётся вторая строка, сначала пустая, потом берём из первой строки по одной букве и добавляем СЛЕВА в первую строку. Например строка "двач" Берётся первая буква "д", добавляется слева к строке "", получается "д". Берётся вторая буква "в", добавляется слева к строке "д", получается "вд". Берётся третья буква "а", добавляется слева к строке "вд", получается "авд". Берётся четвёртая буква "ч", добавляется слева к строке "авд", получается "чавд".
>>2533150 Ты у меня спрашиваешь? Я го не знаю, я тебе просто алгоритм объяснил, потому что ты сказал, что ты его не понял. Я даже не знаю, про что статья по ссылке, я только код читал, может там как раз и описывается реализация reverse из их стандартной библиотеки или что-то такое.
>>2510725 (OP) >Go является маяком стабильности Напомните сколько времени прошло после того как после неотключаемой сборки мусора которая фризила бэкенде и все разрабы послали нахуй это язык прошло времени прежде чем разрабы языка очухались и сделали её отключаемой?
У меня возникло ощущение, что местные дженерик функции это какие-то макросы. С ними нельзя ничего сделать кроме как указать тип, который в последствии генерирует готовую функцию. Ни вернуть, не вставить в качестве аргумента.
>>2535355 точнее, я хотел спросить: много ли кода использовано с легальным использованием shadowing ? Возможно, бросаться ставить линтер в CI идея дурацкая и неспроста в golangci-lint не поддерживается нигде
>>2535355 >>2535361 нихуя не понял. golangci-lint давно умеет шедовинг проверять с помощью настройки go vet linters-settings: govet: check-shadowing: true >Возможно, бросаться ставить линтер в CI идея дурацкая нихуя не понял. иметь линтер в CI это базовая вещь >неспроста в golangci-lint не поддерживается нигде нихуя не понял. не поддерживается что? где? >а как У ВАС В КОМПАНИИ? Линтер хотя бы запускаете для разнообразия? golangci-lint гоняется для всех гошных проектов с небольшой пачкой линтеров. команды по желанию могут расширить набор конфигом >много ли кода использовано с легальным использованием shadowing ? а нужно ли изъебываться и креативить с названиями для err
>>2535660 >golangci-lint гоняется для всех гошных проектов с небольшой пачкой линтеров Ага! А с какой именно? Там сейчас есть дефолтные, но интересно как у людей
>>2535660 возможно, я вчера был уставший и не правильно разобрался с go vet shadow. Вроде бы сегодня все работает. Соответственно, мне не нужно запускать несколько линтеров и у меня не бонбит
>>2536205 >go func уходит в стек вызовов что эта фраза значит? какое явление описывает? Полностью на тарабарском.
В общем, я решил просто написать тестовую программу и выяснил что вообще ничего не понимаю в Go. https://go.dev/play/p/ideka61QwER Как правильно должна выглядеть работа с waitGroup в этом случае?
Конечно, в такой простой логике не следовало бы использовать sync.waitGroup, однако мне неизвестно реальное количество обработчиков к тому моменту, как программа решит остановиться. Их будет чуть больше чем создано каналов и поэтому я использую waitGroup. Но как тут принято делать?
>>2536189 2 выполнится после 1, но нет никаких гарантий относительно 3 и 4. >>2536266 wg.Done желательно чтобы было видно там же, где происходит wg.Add. а также лучше wg.Done засунуть в деферы. если опустить глобальную вг и то, что processor завершается раньше тасок (мб с реальным кодом это и будет логично, но в примере кажется, что они могли бы отслеживаться вложенной вейтгруппой, которая создается в processor), то на минималках по феншую это примерно так https://go.dev/play/p/wvvh0AnEviN
>>2536366 Хороший у вас тред. Как правило, я за 3-5 так или иначе прихожу к тому же ответу, что будет напечатан.
Ладно. И что не так с поддержкой докера в vscode? Почему в шаблонном проекте не отладочного файла? Я прям устал с этим compose. Пока не очень работает, но судя по примете, я экспериментальным образом подберу параметры к понедельнику и все заработает. Нг может есть готовый шаблон?
>>2536909 В общем я все починиль. в VSCode какая-то засада с докером, если он НЕ питон и НЕ нода и НЕ Сишарп. Единственное, что можно делать - docker compose up (причем нельзя делать посервисное поднятие). После этого можно делать debug with remote connection.
У меня теперь другая засада : почему-то delve всегда пытается собрать новый бинарник под видом __debug_bin, а у меня в контейнере даже сети нет (так уж надо, в этом суть программы)
Что не так с delve? Как тут собирать бинарник под delve ?
Из-за ебучей системы сборки, Go не знает какой код на самом деле нужно компилить. Информации в файле go.mod недостаточно, ведь есть непрямые импорты. а go.sum используется только для проверки. В блоге самого Докер, чувак предлагает подцеплять специальный том для кеширования. https://www.docker.com/blog/containerize-your-go-developer-environment-part-2/
что выведет программа только не подглядывая var err error var val ✡error var ierr any = err var ival any = val fmt.Println(ierr == nil) fmt.Println(ival == nil)
>>2539537 >>2539533 Добавлю, что это не просто так. По умолчанию, оператор присваивания берёт копирует само значение в переменную. ierr это копия nil ival это копия указателя на тип error
Вылезает то, что на пике. 1)Почему вылезают символы? 2) Как исправить ошибку? Установил postgres на ПК, создал базу todos через pgadmin4(через неё заходит в базу).
>>2541216 ООП это не про синтаксис. Это парадигма. ООП код вполне можно писать на C. >>2541817 Что не так? В unix есть команда sync например, которая flush`ит файлы из кэша на диск физически.
>>2544495 >>2544570 Ну, го достаточно хайповый стал, вроде бы. По ощущениям, меньше больших копроративных неповоротливых системы пишут, и больше интересных стартапных. Так то мне Java, как язык, и так нравится.
>>2544571 > ООП это не про синтаксис Так-то да, но в контексте какого-то языка всегда имеются в виду средства для ООП в этом языке. То есть классы, объекты, инкапсуляция, наследование, полиморфизм и другое говно.
>>2544571 >ООП это не про синтаксис. Это парадигма. ООП код вполне можно писать на C. Это понятно, но писать ооп-лапшу с джаве и писать ооп-лашку в 1с это очень разный экспириенс. Во втором случае у тебя всё наследование и инкапсуляция держаться будет на иоглашениях.
>>2545201 В РФ много вакансий уже. Вроде тот же хх, авито, сбермаркет, wildberries, Aviasales, ozon на голанге пишут. Некоторые даже свитчеров с Java/C# начали нанимать. Кстати, что интересно, походу только через свитчинг вкат и осуществим в голанг, для джунов вакансий нет, лол. Просто я немного заебался с корпоративной тягомотины в банке на java, хотя так то мне java/spring стек очень нравиться. Хотя, понятное дело, это больше от проекта зависит, но всё же. Еще пугает, пишут, что го говнокод зашкаливает, так как у вас там ООП нет и нормально применить всякие популярные паттерны невозможно.
>>2545434 >нормально применить всякие популярные паттерны невозможно. Да ты и сам гавнокодер. С современном айти паттерны не нужны никому, кроме индусам
А как тут люди пользуются regex'ом, если нужны какие-то чуть более сложные обработки строк? Или тут такое не принято даже? Надо сторонние библиотеки импортировать?
>как тут люди пользуются regex Как в любом другом языке - строго по назначению: структурированные тексты небольшого размера (грепать логи слишком дорого)
>>2545434 > так как у вас там ООП нет и нормально применить всякие популярные паттерны невозможно. Некоторые невозможно, но большинство можно написать, тут нет классического ООП. Да и с другой стороны в чем суть писать всякие паттерны? Никогда не понимал почему джависты срут фабриками ZalupaFactory zalupaFactory = new Zalupafactory(); ZalupaInAss zalupaInAss = zalupaFactory.getZalupa("inAss");
Вместо ZalupaInAss zalupaInAss = new ZalupaInAss();
И такое по всему коду, если упадет стектрейс читать невозможно, нахуя весь этот лишний говнокод?
Для закрепления базового синтакса решил попробовать прорешать литкод. Дошел до линкед листов и немного опешил. До этого на пистоне для итерации использовал генераторы типа пикрелейтеда. Поискал как подобное сделать на го и увидел, что самый популярный варинат это через каналы, что мне кажется не совсем чистым, так как требует запуска отдельной горутины (то есть фактически дополнительного треда и средства для его синхронизации). Можно ли как-то альтернативно это реализовать?
>>2548161 >нахуя весь этот лишний говнокод? >How can an object be created so that subclasses can redefine which class to instantiate? >How can a class defer instantiation to subclasses?
>>2548340 >>How can an object be created so that subclasses can redefine which class to instantiate? >>How can a class defer instantiation to subclasses? А зачем это нужно? Я не спрашиваю как создавать подклассы, я спрашиваю нахуя оно нужно? И почему кроме джавистов никто такой хуйней не страдает?
Если хочу вкатиться в бек или фулстяк, го норм тема? Год работаю js макаком, как то начинает уже заёбывать, хочется расширить квалификацию хотя бы, не вечно же кнопки красить.
>>2548968 Чел, не демотивируй меня плс. Бекендеры решают серьёзные задачи, по сравнению с нами фротомакаками. Да и бекенд по универсальнее и шире же должен быть, соприкасается с другими специалистами намного чаще чем фронтенд.
>>2548636 >но yield ведь нету. Я кажется понял в чем наше недопонимание
Вопрос в том, действительно ли мы не можем создать свой итератор типа range, потому что создали языка просто скрыли аналог yield внутри компилятора и могут его юзать, но не дают это делать пользователю?
>>2549036 yield не скрыли. его просто никогда не было. тот range, который ты считаешь за аналог итерирующего range в python, это range, который умеет итерироваться по срезам и map.
Книга рассказывает о том, как разрабатывать уникальные языки программирования, чтобы сократить время и стоимость создания приложений для новых или специализированных областей применения вычислительной техники. Вы начнете с реализации интерфейса компилятора для вашего языка, включая лексический и синтаксический анализатор, а к концу чтения сможете разрабатывать и воплощать в коде свои собственные языки, позволяющие компилировать и запускать любые программы.
Издание предназначено для разработчиков программного обеспечения, заинтересованных в разработке собственного языка программирования или адаптации существующего языка для той или иной предметной области. Студентам, изучающим информатику, книга пригодится как практическое руководство по разработке языка.
Для изучения материала понадобятся базовые знания и опыт работы с языком высокого уровня, таким как Java или C++.
>>2549481 Че донести хотел? Этот вопрос со времен Dragon Book (1977) закрыт. Ну гошники могли еще у K&P (Керниган и Пайк, это немного другая книга, но тоже хорошая) ознакомиться с lex и yacc
>>2549797 Ты спросил в Go-треде, но не в тредах про питон и пхп, значит, выбор ты уже сделал. Хотя хуй в бэк вкатишься через Go, здесь одни миддлы перекатываются из бэка на других языках.
>>2550265 В Go нет кадрового дефицита, это язык для тех, кто знает, чего хочет, а не чтобы массово клепать бизнес-логику, как во всяких джавашарпах, где вечный дефицит кадров.
>>2550693 у нас делается так: поднимается сервис и БД, соседние сервисы мокаются через ховерфлай. отдельный тестовый бинарь кидает запросы в поднятый сервис. ну и нужно подумать надо ли оно тебе. мб тебе интеграционных тупо на репу хватит, а ручки можно юнитами протестить.
>>2551798 структурно вроде норм, так и должно выглядеть, разве што респонс не проверяется. единственные вопросы такие - не видно как завершается app (t.Cleanup есть?) - непонятно зачем t.Error с return, когда есть t.Fatal - string(body) с %s можно не делать
>>2551798 >Интеграционные и юнит тесты довольно логичное разделение. ето да. но как отделить интеграционные от дымовых и функциональных? должен ли ты написать кучу разных mock-объектов или достаточно въебать какой-нибудь конфиг в docker имитирующий бд и батник с тестами?
>>2552383 классификация тестов - настолько неоднозначная и сложная штука, что нормальные компании на нее забили. и вот что они предлагают:
>маленькие тесты выполняются в одном процессе, средние тесты — на одной машине, а большие тесты могут охватывать столько машин и процессов, сколько понадобится
ЮТакая классификация, в отличие от более традиционного деления на «юнит-тесты» или «интеграционные тесты», была выбрана, потому что для нас важнее такие качества теста, как скорость выполнения и детерминированность независимо от широты охвата тестирования. Маленькие тесты с любой широтой охвата за счет ограничений, наложенных на них, почти всегда быстрее и более детерминированы, чем тесты, вовлекающие в работу обширную инфраструктуру или потребляющие больше ресурсов. С увеличением размеров тестов многие ограничения ослабляются. Средние тесты обладают большей гибкостью, но они недостаточно детерминированы. Большие тесты сохраняются только для самых сложных и комплексных сценариев тестирования.
>>2554026 Все равно не ясно. Давай на примере. Анон пишет некий ссылкосокращатель. Как бы выглядел интеграционный тест и чем он отличался бы от функционального? Интеграционный должен использовать мок-класс , а функциональный мок-вебсервис?
>>2554154 Стало только хуже. Ты мемасы локальной конторы выдаешь за суть индустрии. Вот одна из твоих ссылок сообщает: >The difference is that an integration test may simply verify that you can query the database while a functional test would expect to get a specific value from the database as defined by the product requirements.
Ну вроде понятно, но смущает что все по-разному пишут
>>2554259 >Мне больше нравится классификация от softwaretestinghelp, там вообще логичнее все. В рот их короче ебал но там вообще нельзя отделить Функциональный от Интеграционного. У них функциональность как отдельный признак. Еще большая хуйня.
Хотел повыпендриваться знаниями? Так приходи подготовленным... на конференцию со звездами
написали ахуительную функцию stop, а пояснить не поянили
// The stop function can be called // multiple times safely. stop := func() { select { case closing<-struct{}{}: <-closed case <-closed: } }
Ок, послали closing<-struct{}{} первый раз, это понятно. Нахуя сразу же блокироваться на <-closed?
Если мы положили в не буферизированый канал closing<-struct{}{}, то он заблокируется и пре остальных случаях вызова stop мы будем сразу прееходить в ветку case <-closed и ждать пока канал closed закроют? Аналогично этому мы блокируемся сразу после closing<-struct{}{}, чтобы первый вызов <-closed тоже заблокировался по аналогии с последующими вызовами stop?
Правильное рассуждение для чего нужен этот ебаный цырк? Эта ебка нужна, чтобы тот кто вызывает stop не упал с паникой потомучто канал закрыт, а просто блокировался?
>>2555011 > go101.org хуй знает с чего ты решил что это хороший сайт. Вот хороший сайт: Язык_программирования_Go_2016Керниган.pdf 978544611885_Go__идиомы_и_паттерны.pdf
Чтобы горутина завершилась при close пиши в ней : for elem := range channel { fmt.Println(elem) }
>>2555011 Ну вроде там все написано. Берем пример 4: >Sometimes, it is needed that the close signal must be made by a third-party goroutine. For such cases, we can use an extra signal channel to notify the sender to close the data channel.
Но я не понял твой вопрос и с чего ты взял что там неблокирующийся канал использован? Это обычная техника. Есть ситуации когда переменная-канал просто недоступна и какая-то горутина захочет все равно остановить или подать сигнал внутрь. В этом случае читают с помощью select из двух каналов сразу. struct {}{} используют как канал, но без конкретных данных.
>>2555054 Описание говорит we can use an extra signal channel to notify the sender to close the data channel. А как нихуя не пояснили, просто высрали код.
>читают с помощью select из двух каналов сразу. case closing<-struct{}{}: Это же запись в канал идет, а не чтение,можно понять хотя бы метом исключения, потомучто по коду больне никто не пишет в closing.
Вопрос конкретный, какого хуя происходит в коде stop := func() { select { case closing<-struct{}{}: <-closed case <-closed: } }
почему он должен останавливать сендер и почему его можно вызывать много раз?
>>2557459 >>2557476 >>2558520 Сейчас почти все МЯСО (кроме банков) в большинстве случаев пишет весь новый бекенд именно на го, насколько я слышу от своих одногруппников, которые там работают. Сам таким образом случайно вкатился го стажером в сентябре, хотя изучал долгое время жабу и спринг. Просто HR сказала, что команды с джавой стажеров себе не ищут, а вот те, что на го пишут, часто ищут себе стажеров в последнее время, ну я и согласился пройти собес просто ради интереса. И там где я работаю, все старье с питухона/С++/иногда жабы/etc переписывают на го.
>>2545434 >походу только через свитчинг вкат и осуществим в голанг, для джунов вакансий нет, лол А крупняк почти не нанимает джунов, они нанимают стажеров, из которых потом делают джунов. Так вот вб, авито, озон стажеров точно нанимают на го, лично знаю стажеров (или уже джунов) из этих мест.
>>2544570 >scala Скала кажется скорее метрва, чем жива. Самое крупнейшее сообщество скалистов в РФ - Тинькофф, и те начали от скалы уходить.
>>2561057 Никто не выёбывался, я реально нихуя не понял что имелось в виду, там какой-то конкретный раздел, просто по-другому называется или подразумевается что страничка документации это и есть "Learning Go"?
Поясните за context.Context. Я правильно понял, что сам по себе он никакие функции не кенселит, это задача кода переодически проверять не был ли context кэнселед и если да, то выходить с ошибкой?
Аноны, чё делать. Сам я воннаби свитчер из пхп. Надо по хорошему ебануть пет уровня очередного блядь говнокруда ебаного которые я в рот ебал: туду лист, 100 любимых фильмов и т.п. Но у меня такое лютое полшестого при одной мысли, что я буду БЕСПЛАТНО делать хуйню, которой уже не первый год занимаюсь за деньги. Хуй привстаёт только на идеи оффлайновых консольных приложух - архиватора, простенькой субд (особенно на это). Тут писали, мол го это про круды, значит пиши круды или работодатель покрутит пальцем у виска. Но это такой мрак. Поддержите что-ль и скажите, что субд тоже норм, или подкиньте идей хоть для самую малость интересного круда. Ну а с меня нефть.
>>2561346 Докер, кубер, прометеус, консул и много чего ещё написаны на го и никто у виска не крутит. Пиши чё по кайфу. Единственное: но го не принято писать приложухи, которым нужна предсказуемая latency, потому что GC. Так что СУБД всё-таки мимо, хотя в академических целях чему бы и нет.
>>2561346 никакому нормальному челику не будет интересно твой пет/кофешоп листать. это что-то вроде лаб из универа, тысячная вариация одной и той же хуиты на гитхабе каждого второго индуса/китайца. ты уверен, что хочешь идти работать на людей, которым это интерсно? >подкиньте идей хоть для самую малость интересного круда >>>2397240 (OP)
>>2561368 >ты уверен, что хочешь идти работать на людей, которым это интерсно? Хороший вопрос. А что, вопрос в хайринге разрабов на гоху не стоит таким образом, что люди без пета автоматически идут нахуй? Я просто не в курсе реалий гошного рынка, а петов никогда не писал именно с целью показывать при найме, все мои петы сделаны для себя на языках, на которых я вряд ли буду когда-то работать (хотя чем чёрт не шутит, мой самый жирный - это мод для майнкрафта)
Go-господа, какие материалы для изучения GO на русском можете порекомендовать? Англ еще учу - пытаться еще го учить со своим знанием языка совсем тяжко. Спасибо!
>>2561901 Можешь дёрнуть курсы Otus с торрентов, мне такое особо не нужно, т.к. много воды и я не новичок, чтобы так мне всё разжёвывали, но тебе может и пойдёт https://pastebin.com/fFyjSjJB
>>2561911 >>2561901 Да, забыл добавить - я уже самостоятельная личинка веб-макаки фулстек на node.js хочется перекатиться на что-то более фундаментальное
>Не слушай этого мудака, какой ещё нахуй n-body simulator, на тебя там все как на идиота посмотрят и спросят, ебанутый ты или да а ты и да, не рассказывать же на собесе, что послушался совета на двачах. Го это на 99% язык для системных и околосетевых приблуд, докеров, сервисов, веб-сервисов, банкинга, недо-бд и так далее и тому подобное. Поэтому для начала сделай простенький веб-бэкенд, чтобы получать запросики и сохранять их в бд и обратно. Хотя бы. Потом попробуй поверх какую-нибудь бизнес-логику накрутить, например написать сервис-сокращатель ссылок, а лучше что-нибудь с фоновой работой
>>2562297 >язык для системных и околосетевых приблуд, докеров, сервисов, веб-сервисов, банкинга, недо-бд и так далее и тому подобное. Соответственно, если ты ни в чем не разбираешься, как типичный кодерок, писать тебе вообще нечего. Нет никакого смысла. Нет идеи. Нет движущей силы. Нет пет-проекта.
>>2562322 >>язык для системных и околосетевых приблуд, докеров, сервисов, веб-сервисов, банкинга, недо-бд и так далее и тому подобное. >Соответственно >для начала сделай простенький веб-бэкенд, чтобы получать запросики и сохранять их в бд и обратно. С - системность а до конца мы не дочитываем, выхватываем только то что нам удобно?
>>2562322 Такая напыщенность, а когда задают вопрос "чем конкретно занимаешься": >>2524359 продуктовые это уровня - есть шина данных (например какой-то топик в kafka или NATS) и сервис, который умеет отправлять пуши пользователям. нужно запилить сервис, который будет слушать шину и при получении определенных событий ходить в rpc ручку сервиса пушей, чтобы отправить эти пуши. а еще нужно запилить дедупликацию с БД/редисом, чтобы одинаковый пуш дважды не отправить. плюс возможно после получения события надо сначала идти в какие-то другие сервисы, чтобы взять нужную инфу для пуша. - или нужно начать отдавать какие-то данные на фронт, т.к. мы хотим пользователям больше инфы показывать, например граф движения посылки. для этого нужно в сервис с апишкой допилить поход в сервис статусов за этой инфой.
Эм, это как-то не похоже на системное программирование и на отсутствие задач для бекендератипичного кодерка, который ни в чём не разбирается, не находишь?
>>2562473 Я просто имел ввиду, что для вкатыша не может существовать пет-проекта на Go. Пет-проект должен приносить радость. Нужно с ним нянчиться как с Pet.
Хорошо, если ты админчик или увлеченный хакер. Но вкатышь из php не может им быть.
Кстати, кафки эти ваши, тоже какое-то бесполезное говно созданные потому что в больших корпорациях а) не знают что делать с данными, но знают что за их удаление их не простят б) не могут договориться как их обрабатывать и поэтому делают шину. То есть, это все непостижимо выходцу из мира обычных приложений.
>>2561346 Свой движок СУБД писать интересно, но боюсь что очень долго, да и без подготовки имхо тяжеловато будет. Я вообще никаких петов на го в свое время не писал, просто сказал на собеседовании, что прошел го тур (но при этом был опыт на другом языке), в итоге взяли. А вообще лучше ковырять что-то уже существующее в опенсорсе, а не писать свои велосипеды, пользы больше будет + прокачаешь навык чтения кода.
>>2562581 >Тестов наделать например Дебсы все еще верят в то что написать хороший тест не в десять раз сложнее чем написать говнокод который он должен тестировать. Также дебсы продолжают писать assert 1+1==2 и думают что это несет хоть какую то пользу хоть кому то.
>>2562578 Ну так можно рогалик сделать, и похую кто там чё итт скажет по поводу можно ли использовать го для этих целей или нет. А действия мобов в многопотоке обрабатывать
>>2562606 > прокачаешь навык чтения кода Я как-то не замечал раньше, чтоб чтение кода было каким-то отдельным навыком, хз. Но совет про чтение опенсорса всё равно понял и принял.
>>2562629 Да, но не совсем понятно откуда эти данные берутся. Кажется, не везде стоят ТСПУ и кое-где есть самодельные блокировщики. Эту инфу сливают и этот тип делает какого-то бота. Почему на Go - не ведаю.
Еще он автор доклада "Почему Golang такой странненький".Просто ему нравится писать.
>>2562747 что такое горутины, как они шедулятся, чем обработка неблокирующих сисколов отличается от блокирующих, как гц работает, как подобрать таймаут на сетевой запрос, че там в пакете sync и как работает, ну дохуя классических вопросов в общем >>2562930 про кубер пара вопросов есть, но чисто как бонус. из тулзов нужно знать ппроф/трейс, чем моки можно генерить. уметь sql писать, уметь пользоваться индексами. ну и уметь пользоваться каким-нибудь месседж брокером, а то иначе странно. плюс знать что такое метрики и нахуя (это к слову как таймаут подбирается) и такое
>>2563557 постижимо, если тебя наняли упругим студентом и ты там 2 года поебался с кафками за (небольшие) деньги. Пользу фрилансеру или мамкиному борщехлебу кафки принести не могут. Если ты пытаешься это изучать бесплатно, то мотивации не будет.
>>2564613 Вообщем нет, но cs база мб полезной также некоторые крупные компании типа IBM смотрят на это и существуют различные программы иммиграции с балльно рейтинговой системой канада / австралия, если тебя это интересует
>>2564709 Го это немного специфичный язык, на который как правило переписывают уже устоявшиеся копролиты на других языках (зачастую php). Поэтому чисто гошных вакансий мало, зато дофига вакансий PHP+Go, Java+Go, и так далее. А особенно сейчас, когда многие конторы релоцировались и с рынком вакансий черте что происходит. Тем более, что джуны никогда никому не были особо нужны, потому что джун в первый год-два это чистый убыток, мало того, что ему надо зарплату платить, так он ещё и отвлекает других разработчиков, которые иначе бы полезные дела делали.
>>2565825 >А особенно сейчас, когда многие конторы релоцировались и с рынком вакансий черте что происходит. На гошке сейчас вакансий в России больше, чем в Европе
>>2566382 В целом ожидаемо, на го мне кажется условных сеньоро-миддлов больше, чем джунов и многие из них уехали, "закрыв" вакансии в ЕС и "открыв" их в РФ. Тем более сейчас очередной финансовый кризис, медвежий рынок, вот это всё.
Но вот что будет в будущем, в том числе краткосрочном, и не закроют ли найм в россии - непонятно. Я разные прогнозы встречал.
>>2567065 Он обкурился сишкой, где тоже любят из функций возвращать коды ошибок. Хотя уже тогда там были setjmp/longjmp, используемые некоторыми для эмуляции эксепшенов.
Ну а аргументы за EC есть? Просто я ни одного не знаю, читаю книжку Хуйла "чистый код", он за эксепшоны ратует, потому что EC код захмамляют. А он вообще ассемблерщик лютый.
>>2567087 Из плюсов возврата ошибки в сравнении с ексепшенами: 1) Проще делать всякую около-ошибочную логику, вроде retry-ев всяких backoff, circuit breaker, etc 2) Асинхронщина. В общем случае не ясно когда завершиться (к|г)орутина, и тем более не ясно catch-ить её эксепшен в другом условном потоке 3) Производитльность. Стек трейс штука не бесплатная, в ряде случаев еще и бесполезная например когда разработчик ожидает конкретный эксепшен и делает что-то вместо логирования
Из минусов очевидное: Но 99% случаев это да, замусоривание кода if err != nil { return nil, fmt.Errorf("do huina: %w", err) }
>>2567065 пайк ругался, если я получаю ошибку и не обрабатываю, причём не просто вконце функции, а непосредственно после вылезания ошибки, и сам потом мне говорил: вот я получаю ошибку и обрабатываю, и ты так делай!
>>2567144 Каждый дрочит как хочет, есть, например, json либа, где в случае чего - паника, а потом на верхнем уровне - recover и возвращается ошибка значением. В yaml тоже самое. В sql.Rows сохраняется ошибка в структуре, а в каждом методе структуры проверяется эта сохраненная ошибка, и в случае её наличия метод ничего не делает. Это самое близкое к тому что ты написал. Но там это нужно для другого, а твой вариант не решает проблему того что надо if err != nil писать, просто перемещает эту проверку внутрь вызываемых функций. + бонусом добавляет проблему, что когда ошибка попадет в логи будет не ясно из какой именно функции она пришла.
Читаю про многопоточку в го-туре. Человек, до этого знакомый с многопоточкой на уровне "ну есть такое явление, слышал есть в ОС какие-то треды, там мьютексы пайпы семафоры". Вообще охуенно, не знаю это именно в пщ так пиздато сделано или меня просто так новая тема захватила, но штырит так что второй день нормально работать не могу, думаю о многопоточке.
>>2569059 >экспешны проще Это когда нормальные. В 1с например есть эксепшены, но он такие всратые, что обычно видишь >сохраняется ошибка в структуре, а в каждом методе структуры проверяется эта сохраненная ошибка, и в случае её наличия метод ничего не делает
>>2569029 Экскепшены тоже хуйня, потому что ломается вывод типов, неудобно чейнить код с ними, паттерн матчинг не заюзаешь, они требуют больше ресурсов при выбросе для раскрутки и так далее. Лучше всего имхо это сделано в расте. Псевдокодом:
fun Foo() Result[int64] { // Result[T] = T || error foo()? // ? - это сахар вокруг if err bar()?.wrap("comment") // допишет в ошибку "comment" для трейсинга switch b := baz() { case error: обрабатываем b отдельно как ошибку, если очень надо case specialError: обрабатываем b как специальный тип ошибки case value: обрабатываем b как результат (если ошибки не было) } b := bazz()? // вернет ошибку, если b это ошибка иначе присвоит b значение }
Отличный микс подходов. Компилятор генерирует эффективный код, ошибки видно в сигнатуре функций, легко резолвит нуллабилити, удобно для функциональщины, удобно для чейнинга, удобно обрабаывать ошибки и контекстуализировать их, не требует ни многострочных try(e) catch {throw e2(e)} на каждый пук.
Очень жаль, что гошники идеологически против синтаксического сахара, имхо, его тут немного, а код выглядит ну в разы симпатичнее.
---- Ну и если уж взялся рекламировать раст, отдельный ништяк это иммутабельные ссылки/указатели. В го указали используются для нескольких вещей: 1) Передать указатель на что-то внутрь функции, чтобы поменять значение внутри, к пимеру функция sort(slice []T) 2) Сделать что-то опциональным/нуллабельным 3) Оптимизация лишних выделений памяти при копировании, которые произойдут, если начать большую структуру передавать в функции по значению
Хуйня в том, что не всегда понятно, зачем что-то передается по указателю в конкретном месте. Просто непонятно по сигнатуре функции, визибилити нет. В расте же каждый из этих моментов реализуется по своему: 1) можно передать не sort(slice []T) а sort(slice mut []T) тогда сразу понятно, что это мутабельная хуйня и slice внутри функции будет изменяться 2) можно передать не sort(slice []T) а sort(slice immut []T) тогда сразу понятно, что это иммутабельная хуйня и указатель тут нужен для оптимизации передачи данных 3) можно передать не sort(slice []T) а sort(slice Optional<*[]T>) тогда сразу понятно, что slice опционален и его можно не передавать. Кстати, отдельным ништяком, Optional надо резолвить, доставая из него значение и поэтому nil pointer exception невозможен в принципе, ты не сможешь накосячить и попытаться разыменовать пустой указатель.
Короче имхо между Rust и Go потерялся идеальный язык. С гошной экосистемой, гошным рантаймом и прочими ништяками, но при этом с чуть большей свободой по работе с VM и памятью и разумным количеством сахара, чтобы не захламлять код обработкой ошибок, проверками на nil и прочим скамом из 80х
В джаве же тупо кидается какой-нибудь NotFound эксепшен и всё, в него на айдишников не пишут, ничего. В лучшем случае запишут текстом в самом начале трейса, никто каждую строку в try catch не оборачивает и айдишники не дописывает.
В го же ты в итоге получишь прям контекстуализированное сообщение об ошибке: cant exec scenario 221: can't load user 115: can't find object "dick": gay detected
не понимаю указатели, в сторе создаю слайс указателей на структуру юзер и возвращаю слайс в хендлер, всё так делаю или как, как будто просто хуярю указатели не понимая, помогите
>>2510725 (OP) Парни, ищу стажировку/позицию джуна, я адекватный чел, перекатился с питухона, есть универский бекграунд в области информатики, опыт коммерческой разработки - чуть больше года. Знаю/понимаю стек типичного микросервиса, в целом, если есть любой вариант писать коммерческий код на гошке, оставьте почту, я свяжусь.
Выбора нет, использую все каналы коммуникации. Даже двач, хули. Реальность 2к23
>>2571789 Ниже планки неинересности/желания терпеть инструмент, к тому же 0 перспектив для меня там где я живу про 1с никто не знает и уж тем более не использует(я не из РФ капчую)
>>2571801 Общая эрудиция позволяет сразу отказываться от того, что точно мне не интересно, иметь твердые для отказа совершенно не обязательно, достаточно общего представления, при отказе на работу тебе даже не пишут причину, ведь никто не обязан свое НЕТ объяснять. так и тут
Ну раз тут уже начали торговать хуйцами, то и я хочу перекотиться из питона в го. Коммерческого опыта именно как питухон-разраб 2 года, ещё 5 лет дата аналитиком, но там чисто етл-скрипты писал с скл, потом уже в бэкенд перекотился. На предыдущем месте Django/DRF/Ninja, Neo4j, GraphQL, Vue3, MSSQL+MySQL+MongoDB, немножечко Airflow и Nifi. На текущем месте Flask, gRPC, Redis, PSQL, Gitlab, немножечко React и C# с MinIO
>>2571813 Держись за место пока можешь, я даже на питухон разраба ловлю реджекты, недавно пробовал податься, деньги заканчиваются. Стек Flask, Django, DRF, Psql, Docker, ща стал видеть требования по JS и всяким Vue , React, походу теперь надо быть фуллстеком, нежели простым питухонистом
>>2571818 У меня есть накопления, и в принципе без работы с текущими тратами + инфляцией мне хватит на 2+ года, но коплю на свою отдельную недвигу, а прожирать это не хочется. На текущем месте меня вряд ли уволят в ближайшие 2-3 месяца, но у меня уже будет ровно год и я хочу просить прибавку через перформанс ревью, но боюсь его не пройду, т.к. мало чего за последнее время делаю и больше решаю мелкие баги/рефакторю проект, а не развиваюсь. Хотел переписать grpc-ные сервисы на Go, но свежепришедший архитектор уже решил переписывать все сервисы на rest. А меня уже эти круды заебали.
>>2571806 > Общая эрудиция позволяет сразу отказываться от того, что точно мне не интересно Не интересно и "инструмент хуёвый" это два немножко разных понятия, если первое обосновывать действительно не надо, то второе - ещё как. Я например не могу спиздануть, что паскаль - хуёвый язык, потому что меня сразу попросят обосновать и я жидко умру.
>>2571852 Айти комьюнити сродни философам, лишь бы доебаться. >неинересности/желания терпеть инструмент Я не говорил что он хуевый, я сказал что у меня нет желания его терпеть, читай, нет желания на нем работать, я так давно мог стать Java QA и не ебать себе мозги с Го микросервисами и прочими вещами, мог вот буквально недавно стать Java Trainee , но после Go попытка написать ТУДУ на спринге вызвала у меня горение жопы, даже умолчу о том, что с Java у меня нет проблем, я писал на ней в универе, да и вкатывался с этого языка 3 года назад. Писать веб сервисы на таком я бы точно не хотел, потому что предвижу кол-0во проблем с этим инструментом, а так же , надо нести ответственность за сроки и реализацию, а с ним я этого делать не готов. Можно долго мусолить эту тему, но для меня не достаточно ПРОСТО ПИСАТЬ КОД, мне надо получать моральное удовольствие, чтобы на работу идти с горящими глазами, должна быть заинтересованность. Если ее нету то и результат априори хуевый(в моем случае). Мне не важно, хорошо это плохо. Это то что я прошел на личном опыте и никакие за-против этого уже не исправят
>>2571874 Ты рассказываешь про вещи, с которыми ты ИМЕЛ опыт, в качестве аргумента в разговоре о том, с чем ты его не имел, я правильно тебя понимаю? Мне тоже не нравится спринг и не нравится 1с, но между разница в том, что я действительно работал с обоими этими инструментами и могу аргументированно пояснить что и как.
>>2571788 Чебля? Просто подайся на вакансию разраба в яндексе/авито/озон/вайлдбериз. Там тебе предложат команды с го. А по факту какая разница на чем писать? Главное, чтобы челы в команде были сильными разрабами, чтобы было у кого получиться. А язык это хуета по большей части.
>>2571871 Ну а как ты думаешь это происходит? Пришел чел, в жизни строчки кода не написал, 4 года работал в йоте, поднимал проект джавовый в роли архитектора, до этого работая кволити менеджером. Пришел в другую мобильную энтерпрайз-порашу, где люди пытались внедрить что-то новое, но ему лень разбираться, он с топами забухал и решил откатить всё на пару лет назад, ибо грпс это говно, а рест заебись.
>>2571903 Не обязательно быть грузчиком чтобы не хотеть таскать мешки >>2571909 Не из РФ, озон вроде ок, но алгоритмы после 1 курса универа я не писал.
>>2572268 >Не обязательно быть грузчиком чтобы не хотеть таскать мешки Про "хотеть" речи не шло в третий раз. Речь шла про "утверждать объективную хуёвость"
>>2573111 Я проблему обозначил достаточно чётко - если хочешь, чтобы тебя не трогали, не давай оценочных суждений в областях, в которых несведущ. Если не хочешь тратить своё время - ну покажи для начала человека, который держит у твоего виска пистолет, заставляя его тратить. Я только что дал тебе алгоритм решения обеих твоих проблем, дело за малым.
>>2573154 типикал айти специалист, У нас такой был, девопс. Тоже кукарекал про оценочные суждения, то ему не нравится, тут мы НЕ ДОСТАТОЧНО ОБЪЕКТИВНЫ, ВЫ НИ ШАРИТЕ Я ШАРЮ!. Вообще команду раздражал, долго не хотели выкидывать на мороз, терпели. Потом проект отвалился, западный заказчик был
>>2573904 Да ну не, хуёвая придирка. Ты почти никогда не спутаешь массив с дженериками, слишком разные контексты применения. А дальше уже всё зависит от того, на какие символы твои глаза натренировались смотреть. То есть, наверное уголки были бы самую чуточку легче для восприятия (но опять же: самую-самую, это придирка одного уровня с придиркой к долларам в названиях переменных в php), но оно бы усложнило парсер. Сейчас у символов >< вполне определенный контекст в смысле парсера и поэтому добавление им дополнительной нагрузки добавило бы туда порядочно логики и, возможно, замедлило его. Где-то на гитхабе можно почитать срачи внутри го тим на эту тему.
>>2576344 да просто не проверяешь ошибку и всё. получаеш panic: runtime error: invalid memory address or nil pointer dereference и лежиш урчиш довольно
Анонче, есть среди тебя те кто прошел миллион курсов по голангу и может зарекомендовать лучший? Ну скиллбокс там или слерм или кто? У кого самый годный курс? Требуется не адвансед, а чтоб с нуля мне в голову правильно все вложили. Последовательно. Я самоучка, все по верхам да по верхам.
Насколько я понял, читая тему, что в Go в основном приходят из других языков. А реально ли в Москве свичнуться хотя бы на джуна Go после многолетнего опыта написания драйверов на чистом C под специфическую ОС? Или нужен именно опыт работы в бэкенде и мой опыт байтоёбства на C не поможет?
>>2580603 Ты безусловно прав. К докам я прихожу изредка, но только когда какие-то проблемы. А мне бы хотелось какой-то курс от дяди, который структурированно и постепенно все вложит в голову. А через доки вот получаются такие как я самоучки с кашей в голове.
>>2581215 Дисклеймер - го фановый язык для меня, деньги зарабатываю на другом. Проблемы такие: 1. Го сам по себе не настолько суперсложный язык, чтобы его рассусоливать 2. Он не оброс экосистемой, чтобы её рассусоливать 3. Он не так давно появился, чтобы к нему появились курсы Посоветовать тут можно только работать точечно, если у тебя проблемы с системщиной - смотреть туда, в отрыве от языка, если с языком - читнуть книг и посмотреть репозитории с кучей звёзд. А других вариантов особо-то и нет.
>>2581257 > 2. Он не оброс экосистемой, чтобы её рассусоливать Экосистема есть и вполне себе неплохая. Просто подход другой, в го не приняты фреймворки и ты сам собираешь себе проект из маленьких либ, в отличие от php, где ты бахнул ларавел и всё. Но все кирпичики уже написаны, спокойно берешь logrus, pgx, sqlboiler, goose, kafka-go и что там ещё тебе нужно - и погнали. Новичку чуть сложнее, так как он не знает, чего брать.
> 3. Он не так давно появился, чтобы к нему появились курсы Я тут недавно пытался найти курсы для родственника, так вот: хороших курсов не существует в принципе. Все скиллбоксы, яндекс-практимумы и хекслеты - это примерно одинаковый трешняк. Поэтому нет и не надо, хочешь изучать - берешь и сам гуглишь статьи, мануалы, примеры и пытаешься повторить, ничего лучше ещё не придумали.
>>2582223 > Просто подход другой, в го не приняты фреймворки Нипонел а как же джины и гормы? Хотя джин ещё непонятно корректно ли ОСТНАСТКОЙ называть, учитывая что это выглядит как просто небольшой слой абстракции над стандартными примитивами. >Поэтому нет и не надо, хочешь изучать - берешь и сам гуглишь статьи, мануалы, примеры и пытаешься повторить, ничего лучше ещё не придумали. Это да, но к го это применимо в квадрате. Если в джаве хороших курсов не существует, то в го и плохих не существует.
>>2582597 > джины Далеко не самая популярная штука, хотя и часто встречается. Труъ вей это взять роутер, какой понадобится, валидатор, какой понравится и тд и тп. > гормы? Вот сейчас серьезно и неиронично: горм это самое плохое, что ты можешь втащить в проект. Он хуево сделан, обладает кучей опасных особенностей и при этом ещё и не подходит к го идеологически. Ни на одном серьезном проекте ты его не встретишь, максимум в виде легаси. И любой серьезный гошник скривится, когда его услышит. Большое количество звездочек у него это в 99% джуны-воннаби гошники и результат пиара. Ну или перекатуны с джавы, которые по привычке пишут golang orm и потом используют первое, что выскочило.
> Это да, но к го это применимо в квадрате. Если в джаве хороших курсов не существует, то в го и плохих не существует. Так если никаких хороших не существует, то зачем тебе вообще нужны плохие? Не используй вообще никакие.
>>2583372 Да ну не делится оно.. Наверное теоретически можно что-то вынести из курсов. Из чего угодно можно. Только соотношение вложенных усилий и вообще ресурсов к результату будет крайне неудачным.
Поэтому моё мнение всё ещё такое, что кто хочет что-то изучить - то выбора у него особо и нет, интернет, статьи, книги, мануалы, официальные example project и ответы в чатиках и на дваче опасно, многовато авторитетных джунов.
Не говоря уже о том, что курсы это как правило неудачный разрозненный копипаст хелловорлдов сомнительной давности. А их "менторы" это зачастую те, кто не смог стать нормальным разработчиком. По очевидной причине - зп "ментора" на порядки ниже зп хорошего разработчика.
Какие подводные камни у вендоринга зависимостей? Мне кажется это просто имба, когда вижу папочку vendor сразу понимаю что с билдом никаких проблем не будет. Но почему это не юзают повсеместно?
>>2584702 Репозиторий разбухает как на дрожжах, особенно когда микрописечная архитектура и у тебя 50+ репозиториев с практически одинаковыми зависимостями. Да и в го.мод и так конкретная версия указана, всегда можно подтянуть нужную версию
>>2584702 Это просто не нужно, в go.mod лежат как названия и хеши коммитов, так и чексуммы самих зависимостей. Так что ты в следующий раз получишь ровно те же файлы, что и в прошлый раз, гарантированно. При этом: 1) Не увеличивается вес репозитория, а качать много метров или даже гигов кода никто не любит; Особенно он увеличится, если ему придется хранить все версии всех используемых либ, а ему придется это делать, если ты будешь их обновлять. 2) Go mod периспользуются между разными проектами, в итоге оно не сжирает у тебя место в системе. Можешь посмотреть в качестве примера на nodejs, где ты в трех сервисах сделал npm install и у тебя количество занятого места в системе резко выросло гигов на пятнадцать; Хотя могло бы всего на 3 хотя и это пиздец 3) Скрывает ненужный дифф в реквестах, показывая только реально изменившиеся файлы в текущем проекте. Изменения внешних либ как правило не важны, так как мало кто прям досконально их смотрит. Обычно ченджлог глянули, убедились, что апи не изменилось - и нормально будет. 4) Так все делают, что ты как маленький.
Вот кстати, про вендоринг, да. Я немного на питоне скриптил. Есть там удобная штука venv. Ну т.е. под каждый проект свои зависимости в вирт окружении. Вы знаете. А в го, я так понял, подход другой? У нас есть хома, в которой один воркспейс go и в нем хранятся все модули? Т.е. не важно где у тебя репозиторий в системен находится, зависимости всегда качаются в ~/go/pkg? А есть возможность создавать вирт окружения на каждый новый проект? Хочу питон-вэй. Или поясните почему это мне не надо.
Есть что-нибудь, типа книг, мануалов на языке для работы с поиском, чтением и записью памяти процессов? Что-нибудь не громоздкое. В треде для нюфагов посоветовали книгу на 1000 страниц с рассмотрением симбиана, юникса и хобби автора. Ну вы поняли.
>>2584992 Тебе в го не нужно виртуальное отображение, у тебя все зависимости вообще всех версий для всех проектов кладутся в одну папку, ~/go/pkg, да - и соответственно каждый возьмет ту зависимость, что ему нужна (указана в go.mod).
Всякие питоновые venv'ы - это всё костыли, порожденные изначальной неприспособленностью питона к поддержанию разных зависмостей на одной машине.
Упрощенно говоря, у тебя есть либа А, которая хочет С версии 1 и либа Б, которая хочет С версии 2. В питоне это будет жопа, потому что питон хранит их в системе просто как "либа А, либа Б, либа С" и не умеет поддерживать в системе раздельно "либа С1, либа С2", без venv и прочего. В го в системе все пакеты изначально лежат в виде /пакет/версия: /А/1 (хочет /C/1) /Б/1 (хочет /C/2) /С/1 /C/2 Так что такой проблемы в принципе нет, го решает её из коробки.
>>2586028 >Почему к методу обращаются именно через пакет,а не через класс? нет такого. ни "методов" у пакет, ни "классов". если обращаются через пакет, то это не метод, а функция. к методу обращаются через тип или через объект.
u := &url.URL{} u.Query() // через объект (*url.URL).Query(u) // через тип
>>2586028 Пакеты в го = либы, то есть, нормальные пакеты. Правило потому что такое, чтобы не создавать ненужных коллизий. Проблем с этом не возникает, просто вопрос привычки.
> к методу обращаются именно через пакет,а не через класс? Ты обращаешься к содержимому пакета через имя пакета, далее если ты обратился к классу (точнее структуре, мы же в го), то можешь использовать его методы.
Также в го нет явных статических методов, вместо них мы используем или функции, или методы с поинтер ресивером, тогда их можно вызвать от неинициализированного объекта редко, обычно такого не надо, почти то же самое:
type S struct {}
func (_ S) PseudoStatic() { // do anything }
func bar() { (S)(nil).PseudoStatic() // стильный вариант
>>2584702 экономящие на байтах буратины. им еще так и хочется навернуть побольше дикой хуиты, чисто чтобы обыграть удаление вендора. например чтобы твой билд в докере лез наружу в какой-то кеш пакетов, чтобы не перекачивать зависимости каждый раз и т.п.
нормальные люди всё вендоряд, а сэкономленное время билда уделяют ревью кода зависимостей, который обновился, чтобы не завезти себе лишние баги и уязвимости.
>>2586128 Я правильно понял что в го структуры это аналог классов? То есть в пакете лежат структуры,в структурах методы функции. И чтобы обратиться к функции нужно сделать пакет.функция а не пакет.структура.функция?
>>2585010 >>2586116 Да, аноны, это я все понимаю. Как он хранит свои модули, как хранит питон, какие проблемы и прочее. Я к тому и спрашивал - мол, правильно ли я понимаю и не ищу ли какое-то второе дно. Похоже, не ищу и готовлю го более-менее правильно. Но это как-то пиздец как непривычно. После питония осталось четкое хотенье своего воркспейса в любом месте в системе со всеми зависимостями и самодостаточного. А в го у тебя твой проект в 20 вложенных каталогах ходит за модулями и настройками в ~/go/ Просто не привычно. В любом случае, спасибо за разъяснение.
>>2586150 > Я правильно понял что в го структуры это аналог классов? Не совсем. Структуры в го похожи на структуры в С. От классов там только возможность задавать публичность/приватность. Методы в го можно сделать вообще для любого типа, включая примитивные, вроде int и bool, контейнеры, например slice (net.IP) и map (url.Values)
>>2586028 Пакет это аналог неймспейса из плюсов или шарпа. Методы в го это штука довольно условная, с механизмом похожим на то как работают методы в питоне - т.е. это функция, у которой первым аргументом идет сам объект. Фактически вызов метода это вызов каррированной функции
>>2586128 Статические методы это костыль в языках в которых нет функций и разработчика заставляют ебаться в классы. В го чем-то отдаленным аналогом является вызов функции через тип, например (*S).PseudoStatic(nil). Зачем вообще ввели такой синтаксис я не знаю, единственное где оно выглядит некостыльно - это аргумент для финалайзера https://go.dev/play/p/21xgE0obfnf В общем просто используйте обычные функции в таких случаях. Всякие "псевдостатические методы", где на деле просто игнорируется ссылка на инстанс или копия если ресивер не поинтер но он есть это, по сути, не статические методы. Но они тоже бывают нужны, например для имплементации интерфейса объектом без состояния https://cs.opensource.google/go/go/+/refs/tags/go1.19.5:src/io/io.go;l=592
>>2586136 Двачу докер. Кроме того через вендор проще патчить зависимости. У меня на одном из проектов есть makefile target dependency: @go mod tidy && go mod vendor && git apply patches/fix_hui_govna.patch
>>2586530 Окей спасибо,покопаю поглубже. Пока нравится что язык довольно немногословный и по ощущениям учится очень быстро. С другой стороны печалит что мало информации о кишках
>>2586593 > язык довольно немногословный Вот это неправда, го многословнее других языков. Если ты не согласен, то просто не сталкивался с местными приколами, тут очень много всего нужно делать явно, что является го вей (и за что го многим не нравится).
К примеру, у тебя есть var iarr []int, а тебе нужен []int64. Что ты сделаешь? В каком-нибудь другом языке ты можешь сделать i64arr := []int64(iarr) и всё, проблема решена. В го же тебе придется прям вручную пересобирать слайс: i64arr := make([]int64, len(iarr)) for i := range iarr { i64arr = int64(iarr) }
>>2587120 Я имел ввиду что в языке мало ключевых слов,да и возможностей в целом. Первым делом загуглил есть ли в го аналог листа из жабы,говорят используй слайсы. Плюс довольно странно что функция len() возвращает количество байт,а не количество символов. Не представляю зачем мне может понадобиться знать количество байт. Также у меня есть предположение,что го разработчики имеют в запасе кучу написанных вручную оберток и тупо переиспользуют их в проектах. Уже предвкушаю как буду писать ArrayList вручную. Но это в общем то не доеб,а чисто наблюдение. Каким бы не был язык,работает быстро,да и писать вроде достаточно просто,а это главное
Чому резко стало дохуя вакансий на голанге с большими зпшками? Я, сишарп макака, уже завистливо поглядываю налево, так как сишарп в РФ занимает гордое место у параши
>>2587234 > Первым делом загуглил есть ли в го аналог листа из жабы,говорят используй слайсы. Ага, все списки в го только через слайсы. Есть ещё container/list, но это что-то скорее для собесов, в реальности практически не видел использований.
> Плюс довольно странно что функция len() возвращает количество байт,а не количество символов. Зависит от контекста. В случае len(slice) - это будет длина слайса, в смысле количества итемов, то есть то, что надо. В случае len(string) - да, вернет байты. Но там вообще непонятно, что ты хочешь посчитать. Со строками всегда всё сложно, есть к примеру юникод, где один символ может состоять из множества глифов. Пойди разбери, что для тебя "длина" в данном конкретном случае. И да, если тебе нужна прям длина строки в юникоде, или конверти string в слайс рун []rune и уже смотри его длину. len(string)=bytes же нужно для байтоебства и всяких низкоуровневых оптимизаций. Это тебе не джава, привыкай :)
> Также у меня есть предположение,что го разработчики имеют в запасе кучу написанных вручную оберток и тупо переиспользуют их в проектах. Неа, в целом в случае со слайсом ты почти всё можешь сам делать руками. https://github.com/golang/go/wiki/SliceTricks в помощь, если на память не помнишь чего то.
Если в функцию передать слайс или массив и что-то с ним сделать изменится ли исходный массив. Говоря по русски в функцию передается копия массива/слайса или же сам массив/слайс?
>>2587234 > Уже предвкушаю как буду писать ArrayList вручную. Чем тебя слайс не устроил? С дженериками много ебли в слайсы стало возможно вынести в отдельный универсальный пакет, например https://pkg.go.dev/golang.org/x/exp/slices, может тебе проще будет просто сделать что-то подобное под свои нужды?
>>2587371 подумай почему append возвращает слайс и нельзя сделать тупо append(s, 123).
слайс это структ с поинтером на начало массива. при передаче в функцию создается копия этого структа. т.е копия len, cap и поинтера. если ты будешь менять какие-то поля (аппенд, например, может поменять все три), то из функции тебе нужно будет его вернуть. а если тупо будешь менять элементы в массиве, то не нужно.
>>2587617 В плюсах есть pointer и reference. Первое во многом похоже на то что есть в го, а аналога второму - нет. >>2587371 Массив копируется в функцию, т.е. изменения элементов не видны наружу. У слайсов, мап и каналов такого не происходит
>>2588320 Всё так. В языке есть только бе и ме, и ты этими бе и ме должен выражать системы арбитрарной сложности. Ессно на выходе получается что-то вроде KoKoKoKoKoKoKoKoKoKo Kud-Kudah KoKoKoKoKoKoKoKo kudah kO kud-Kudah Kukarek kudah
Завтра собеседования на миддла(сам оцениваюсь посредине, между джуном и) Пока что дрючу https://www.practical-go-lessons.com Помимо очевидного "к чему ещё готовиться" вопроса, интересно ещё, нужно ли зубрить базовые методы и синтаксис? Многое забыл, и если нужно что-то, обычно открываю cheatsheet.
>>2588883 ну допустим такое из чего состоит слайс, как работает append, что такое мапа и что за load factor, что такое интерфейс почему горутины легче тредов, размер стека по сравнению с тредом ОС, какие есть точки переключения горутин, кооперативность шедулера, повесим ли мы всю программу если поставим GOMAXPROCS=1 и зайдем в tight loop, как обрабатываются блокирующие/неблокирующие системные вызовы, что такое нетполлер и на чем он основан, как стеки горутин аллоцируются и почему они фактически бесконечные фазы гц, зачем нужны остановки мира и зачем нужен write barrier че там в пакете sync, как реализованы каналы, быстрее ли канал мютекса, в каком порядке селект выбирает каналы, че за атомики и как они реализованы что такое контекст и для чего используется
>>2589533 Спрашивали про: >из чего состоит слайс >что такое интерфейс и про ООП в го >горутина vs тред vs процесс. Обмен данными между ними(proc-to-proc etc) >какие есть точки переключения горутин Про само устройство шедулера. Описание и примеры проблем с горутинами и как они решаются. В качестве задачи был факториал, который потом попросили ускорить [с горутинами].
На половине из этого зафейлился. Спрашивали больше, но это запомнилось и было тобою упомянуто. Кейворды, которые буду гуглить: NSQ, netconf, gorm xorm burm, b3 tree.
Это я тупой или составители примера? Почему вместо 0x1e9 написали 1e9 и в результате печатается {1000000000 2} ? Или в этом примере есть какой-то тайный смысл? Кстати, откуда берётся 1000000000?
Кто-то по поводу курсов тут спрашивал, что скажете про эти: https://practicum.yandex.ru/go-advanced И есть ли где-либо в природе сливы оттуда? Хотя бы "проектов", которые они там предлагают сделать.
>>2510725 (OP) > смеемся с залетных крестоносцев Я тут, шалом алейкум. Хочу, чтобы вместе с бэком на Го в одном проекте была Webassembly библиотека на сишечке, собранная GNU make-ом. Можно как-то сделать так, чтобы одним из шагов go build был вызов make? Насколько вообще распространены мультиязыковые проекты на Го - скажем, c фронтом и его линтерами, обфускаторами и так далее, упаковываемым в бинарник бэкенда?
Гоферы, вы там сумасшедшие что ли все? Публичность/приватность функции определяется по заглавной букве, как вообще до такой шизы можно было додуматься?
Я бы тогда ещё впилил обязательную венгерскую нотацию. К примеру если объявил интовую переменную, то обязан добавить префикс i, иначе не скомпилируется. Для строк префикс s, для поинтера p и так далее.
>>2597627 Ты рофлишь это база чуть ли не из семидесятых годов, только тогда прогеры сами эту нотацию юзали чтобы отличить локальное от нелокального, а теперь это возведено в правило. Т.е. не знаю как до такой шизы можно было додуматься, но додумались до неё до того как твои мама и папа познакомились.
>>2597630 заглавная буква позволяет обойтись без дополнительного кейворда уровня export совсем, а это функционально не заменит указание возвращаемых типов
Подскажите, а почему оно пишет вот здесь https://go.dev/play/p/nTh6Zit556Z "./prog.go:8:14: cannot convert t1 (variable of type T1 constrained by any) to type T2" Можно как-то это решить? T2~T1 тоже не проходит. Я вообще вообще могу написать дженерик функцию, которая конвертить сходные примитивные типы один в другой? Если не могу, то го - говно и ваши дженерики нихуя не решают проблем языка
>>2598372 Твоя проблема в том что ты не понимаешь сути констрентов. Ты не можешь взять любой тип и привести его в любой (другой?) тип. В общем случае ты можешь только ~T тильда Т привести к Т Но если тебе нужно не вообще, а именно между числами, что имеет смысл - то и создай себе констрент который будет включать все числа кроме комплексных и конвертируй себе на здоровье
>>2598431 Я не хочу только между числами, я хочу функцию, которая позволяет конвертить просто слайс одних типов в слайс других, если эти типы вообще конвертируемы. Числа здесь это частный случай.
>>2602971 >а давайте сделаем функцию которая делает T1(t2) чтобы вместо того чтобы писать T1(t2) мы могли писать t1 := convert[T1,T2](t2) нахуя блять далбоеб
>>2603785 Потому что блять в го нельзя конвертить один слайс в другой, долбоеб, я об этом одним сообщением выше написал. У тебя одна функция возвращает []int64, а другая требует []int32. И тебе нужно руками создавать новый слайс и заполнять его значениями. Хочется написать одну дженерик функцию для этого, вместо того, чтобы постоянно копипастить этот код.
>>2604275 Тогда ваш го говно, десять лет пытались добавить в язык дженерики и когда добавили, блять, выясняется, что они не покрывают ну самые очевидные ситуации.
>>2604448 ну чтобы добавить ([]int32)([]int64{}) женерики особо не нужны. если бы хотели, добавили так же, как недавние каст массива в слайс и наоборот.
>>2609376 >Комментарии всех недовольных там жёстко удаляют. >первый коммент Should be off by default >ниже Now you guys want to introduce telemetry into your programming language? This is how you drive off any person who even considered giving your project a chance despite the warning signs ну кажется все точки зрения там есть. нахуй нужен однообразный спам недовольных? пусть ставят эмоджы, их не удаляют.
>>2609171 Блять ну пусть или добавили бы, или сделали возможность по нормальному писать обобщенный код для таких ситуаций. Кстати, та же хурма с поинтерами. Миллион случаев, когда тебе нужен поинтер на строку из константы скажем и приходится в миллионный раз в очередном проекте писать функцию func [T any]P(t T) *T { return &t }
Тоже могли бы в язык добавить хотя бы такую функцию
Go или Golang — компилируемый язык программирования от создателей таких шедевров, как UTF–8, язык С, UNIX, Plan9 и других. Go поддерживает типобезопасность, богатую и универсальную стандартную библиотеку функций и инновационные семантики одновременности: все то, что мы в индустрии называем concurrency и parallelism. На сегодня язык Go является маяком стабильности, прагматичности, де факто представляет из себя стандарт в мире бэкенд–микросервисов и серверного оркестрирования.
Обсуждаем язык, смеемся с залетных крестоносцев, обсуждаем почему нам не нужны дженерики, наследование и эксепшены, по каждому багу находим трехстраничный пост в официальном блоге Go, объясняющий почему это на самом деле фича, ждем, когда нам завезут дженерики, наследование и эксепшены.
Растобляди завидуют, сектантская запарта не переваривает.
С чего начать:
- В обязательном порядке проходим Go Tour: https://tour.golang.org/welcome/1 (есть на Русском)
- Читаем документацию прямо по порядку (пункт "Learning Go"): https://golang.org/doc/
- Ознакамливаемся с общим roadmap по изучению языка и сопутствующих инструментов: https://github.com/Alikhll/golang-developer-roadmap (постоянно обновляется сообществом)
Литература:
- Донован, Керниган "Язык программирования Go"
- Также хорошие книги для начала: https://www.golang-book.com/
- Книги из списка https://github.com/dariubs/GoBooks
Полезные ресурсы:
- Сборник паттернов и инфы по микросервисам: https://microservices.io/
- Смотрим видео https://www.youtube.com/channel/UC_BzFbxG2za3bp5NRRRXJSw
Обновляемый список с пакетами: https://github.com/avelino/awesome-go
Небольшой канал треда: t.me/golang2ch и даже живой
Предыдущий тред умирает здесь: >>1986204