Вы видите копию треда, сохраненную 23 сентября 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Для вката в Go читай:
- Донован, Керниган "Язык программирования Go"
- https://www.golang-book.com/
- книги из списка https://github.com/dariubs/GoBooks
- а также смотрим видео https://www.youtube.com/channel/UC_BzFbxG2za3bp5NRRRXJSw
Пэкеджи можно искать тут https://github.com/avelino/awesome-go
Живем в ожидании Go2, пробрасываем ошибки, смеемся над джавистами, которые не могут жить без ексепшенов, дженериков и размазанной бизнес-логики, ждем, когда нам подвезут аналоги эксепшенов и дженериков
Прошлый >>1635774 (OP)
На всякий случай уточнил, по тому что у меня первая ассоциация была с Китаем.
переведу на язык биологии, вы жили в комфорте пилили какую то хуйню для кишков компании(которая особо и не нужны были), в итоге из-за кризисы новые вызовы, если ваш отдел сейчас не войдет в резкий поток изменений, если вы не выйдите из зоны комфорта и в стрессе не начнете хуячить что- то новое, то вы по всем законам рынка должны умереть.
А что, го настолько быстрее скриптов? Ну то есть бысрее конечно, но количество нулей в стоимости будет одинаковым.
Намного быстрее и намного меньше жрет ресурсы. Но это в ряде случаев и если пишут люди с прямыми руками.
К примеру, просто отдавать данные из базы наружу скорее всего все стеки будут +- примерно одинаково (питон и руби чуть медленнее, пхп чуть быстрее, го и джава - очень быстро). А вот когда попрёт бизнес-логика и нужно будет провести 100500 побочных операций, сравнений и запросов в базу на один запрос извне - вот тогда и окажется, что го или джава на пару порядков быстрее.
Но опять же, всё будет зависеть от реализации, на питоне есть pypy и прочие преобразователи в C, в php скоро будет JIT и разница будет максимум в разы.
Для меня выглядит так, что обычно выбираются 2 языка, один для бизнес-логики (чтобы удобно описывать сложные правила), второй - для высоконагруженных системных сервисов (типа сервиса авторизации). Например, в баду для этого используют PHP + GO.
Но ещё нужно понимать, что это крупняк. В небольших и средних конторах можно брать вообще что угодно, там не бывает таких больших нагрузок, чтобы разница становилась действительно значимой.
ты прав только от части, но основной профит не здесь закопан
таки основной профит закопан здесь:
представим ситуацию, нужно по апи отдать сложные данные, часть из которые лежит например в постгре, вторая часть в монге, и допустим у нас как всегда непрерывный рефакторинг, поэтому часть бизнесовой статистики мы руками пишем в другую бд, часть через инвент в реббит/кафку, плюс у нас есть промик, куда мы тоже пишем специфичные метрики
как это будет выглядеть в пыхе/жаве/питоне:
синхронно идем в постгрю (двойной пинг до инстанса)
синхронно идем в монгу (тоже двойной пинг до инстанса)
мержим-преобразуем полученные данные
пишем статку раз (ну я не буду снова писать про двойной пинг)
пишем статку два
синхронно отвечаем промиковскому экспортеру (ну допустим он нас опрашивает раз в тысячу запросов, поэтому это время поделим на 1000)
отдаем клиенту ответ
как это будет выглядеть в го/ноде/питонячьем asyncio
одновременно кидаем по запросу в постгрю и монгу, получаем готовые данные за время самого долгого запроса из двух
мержим-преобразуем полученные данные
кидаем во внутреннюю очередь/канал сообщение, что надо статку записать (там тоже асинхронно запросы кидаем)
сразу же отдаем клиенту
асинхронно отвечаем промиковскому экспортеру
итого, синхронная реализация с точки зрения клиента будет ~4 раза медленнее
и давайте будем честны, тредами на жаве такое не делают, потому что скорее память кончится, а что с ивентлупами в жаве я не знаю, и что asyncio, что reactphp - маргинальные технологии
ты прав только от части, но основной профит не здесь закопан
таки основной профит закопан здесь:
представим ситуацию, нужно по апи отдать сложные данные, часть из которые лежит например в постгре, вторая часть в монге, и допустим у нас как всегда непрерывный рефакторинг, поэтому часть бизнесовой статистики мы руками пишем в другую бд, часть через инвент в реббит/кафку, плюс у нас есть промик, куда мы тоже пишем специфичные метрики
как это будет выглядеть в пыхе/жаве/питоне:
синхронно идем в постгрю (двойной пинг до инстанса)
синхронно идем в монгу (тоже двойной пинг до инстанса)
мержим-преобразуем полученные данные
пишем статку раз (ну я не буду снова писать про двойной пинг)
пишем статку два
синхронно отвечаем промиковскому экспортеру (ну допустим он нас опрашивает раз в тысячу запросов, поэтому это время поделим на 1000)
отдаем клиенту ответ
как это будет выглядеть в го/ноде/питонячьем asyncio
одновременно кидаем по запросу в постгрю и монгу, получаем готовые данные за время самого долгого запроса из двух
мержим-преобразуем полученные данные
кидаем во внутреннюю очередь/канал сообщение, что надо статку записать (там тоже асинхронно запросы кидаем)
сразу же отдаем клиенту
асинхронно отвечаем промиковскому экспортеру
итого, синхронная реализация с точки зрения клиента будет ~4 раза медленнее
и давайте будем честны, тредами на жаве такое не делают, потому что скорее память кончится, а что с ивентлупами в жаве я не знаю, и что asyncio, что reactphp - маргинальные технологии
Так и есть. Кишки может и нужны, но на разработку уходят деньги. И вроде бы эти кишки уже что-то умеют, а что не умеют можно например заменить написанием excel-ек. А тут кризис и необходимость сокращать расходы, и зарплаты надо платить тем людям кто действительно зарабатывает деньги компании (инженеры, монтажники, проектировщики, etc).
Вообще конечно, будь я боссам я бы не ввязывался в такую авантюру как собственная CRM не будучи готовым тратить большие средства уж хотя бы на одного-двух качественных специалистов.
Ко всему этому я был готов, в принципе, просто я хотел играть "безопасно" прыгая с одного места работы на другое, и чтобы умные парни тратили на меня своё время отвечая на глупые вопросы там, где я не справляюсь самостоятельно. А быть тим лидом, принимать ответственные решения, определять архитектуру приложения... У меня для этого тупо не хватает знаний и опыта, а зарабатывать седые волосы будучи джуном мне нахуй не надо. Я всю жизнь топил не за большой заработок, а за комфорт.
Другое дело, конечно, что сейчас может и выбора не оказаться.
https://play.golang.org/p/oIUkTqpDXxJ
Хочу проксировать запрос но чет не выходит.
Ну asyncio уже давно мейнстрим. Wargaming, Ростелеком, Yandex, Avito, Сбер используют aiohttp, который в свою очередь основан на asyncio. Но проблема питона в том, что большинство библиотек заточены под синхронный питон, под asyncio не так уж и много хороших инструментов (а это одно из немногих преимуществ питона), поэтому зачем мучаться с питоном, если можно взять golang, который изначально разрабатывался под асинхронность
> asyncio не так уж и много хороших инструментов
Благодаря популярности пистона, думаю со временем сообщество наверстает отставание. Джанга 3 вон уже прикручивает асинхронность чуть-по-чуть.
Поздно.
Джанга помрёт, оставшись диким легаси.
Им надо было начинать когда асинхронщину втащили в язык.
Ну наконец-то, а то я заебался ждать, когда этот питоний вордпресс сдохнет.
Ну как сдохнет - будет еще 50 лет на поддержке в некоторых проектах
>>662319
не здохнет и не нужна там асинхронность, перфомансом джанга никогда тащить не будет, под nosql ее орм тоже никак не подходит, а вот как "работающая из коробки" внутренняя гуйня для сервиса - самый ок, как mvp тоже неплоха, но сервисы ее очень просто и быстро перерастаюст и в этом нет ничего плохого
>>662278
ты в курсе, что asyncio уже лет пять наверно, мб больше не гуглил, сделайте это за меня; в пыхе например есть swoole, выглядит тоже как топчик, но что-то как-то нет
Начал курить го по совету товарища, который этим зарабатывает, но моя ленивая башка очень тяжело и прям со скрипом воспринимает новое. И так во всем почти. Прикол в том, что я работаю ночным сотрудником техпода и времени учиться - вагон.
Сори, что офтоп, но может, у кого была похожая хуйня? Как заинтересовать себя что ли?
Когда не на работе, пью пиво и смотрю видяшки в основном, как-то чмошно получается.
А что ты делаешь в /pr/?
Ищи, что тебя интересует. Как только найлешь, будешь смотреть видео по теме, а не смешнявки.
Первая пикча достаточно иронична, учитывая что
>verbose
>old fashioned
это свойства, которыми goвно обладало с самого рождения
По сравнению с Java go крайне лаконичный.
А вот, про old-fashioned, пожалуй да, С с горутинами и сборщиком мусора.
Привет
Попал под сокращение на своей работе
К сожалению, с языком лично не знаком, но писал коллегам пару тз для десктопа - делали на Го и отзывы очень годные
Сам я долбаеб, который не умеет читать книжки и привычнее, когда есть ментор/наставник или еще кто. Короче, есть ли годные курсы по пщ? Гикбрейнс, скилбокс, нетология - вроде как полная параша.
Тут особо выбирать не из чего: VS Code или GoLand
Ultimate go на английском - покрывает язык практически полностью, рассматриваются некоторые низкоуровневые штуки, есть небольшой уклон в software engineering.
Разработчик Go от Otus - спорный курс, есть слабые лекторы. из плюсов:
- рассматривается устройство go
- больше прикладных знаний
--есть задания
Оба курса можно получить забесплатно (ну или почти) если хорошенько поискать
нахуй тебе эти параши? возьми православные sublime или notepad++.
В последний раз, когда я его пробовал в вскоде, он не показывал автодополнение для еще неимпортированных пакетов.
Goland это умеет, но делает как-то со скрипом
svg не аттачится, так что ищи тут сам распределение по используемым IDE https://blog.golang.org/survey2019-results
Стараюсь изучить на курсере, пока все нравится, но...Можно ли набраться опыта/экспертизы, не меняя работу? Звучит максимально странно, но сейчас получаю довольно хорошую зп, и не вкатываться джуном.
Более реалистично звучит go + front, только пиздецки не хочется осваивать js.
Аналогично понятно, что можно набраться опыта в мобилках.
Фриланс не найти из-за того же отуствия опыта.
Попробуй написать борду. В процессе ты будешь много гуглить вещей, которые действительно важно знать и уметь.
libgen.is
Комплюхтерных книжек там еще меньше, чем на рутрекере.
Поиск в документах в вк.
Допустим, я делаю рест апи, каждый реквест содержит контекст, который я прокидываю из обработчика запроса по всей иерархии вызовов, где это возможно. Допустим, вся логика сводится к вызову функции, состоящей из последовательных затратных по времени операций, в ней контекст никуда не прикрутишь. В таком случае его просто принимать, но игнорировать?
Или можно ту функцию переписать, чтобы она возвращала результат через канал, написать к ней обертку, которая запустит основную функцию в горутине, а потом будет делать селект между каналом результата функции и каналом Done контекста. Тогда можно будет в случае чего быстро вернуться, но горутина с основной логике будет выполняться в никуда.
Или можно этим сраным селектом обернуть каждое выражение в функции и чекать из контекста отмену на каждом шаге алгоритма, но это будет ад.
Как принято делать?
https://www.youtube.com/watch?v=me5iyiheOC8
>Или можно этим сраным селектом обернуть каждое выражение в функции и чекать из контекста отмену на каждом шаге алгоритма, но это будет ад.
select + ctx.Done нужно использовать в местах, где есть ожидание от других каналов, в остальных же местах достаточно использовать проверку ctx.Err() != nil
>контекста отмену на каждом шаге алгоритма
Если идет обработка какого-то говна в цикле - достаточно одной проверки в начале тела цикла, иначе - перед тяжелыми вызовами, т.е. в большинстве случаев достаточно перед IO операциями
можно сделать грязный хак, типо
func DoSomethingWithCancel(ctx context.Context, params...) (val interface{}) {
funcThatDoSomething := func(params...) interface{} { ... }
internalCtx, cancel := context.WithCancel(ctx)
go func() {
val = funcThatDoSomething()
cancel()
}
<-ctx.Done()
return val
}
только не <-ctx.Done(), а конечно же <-internalCtx.Done()
У этого парня из Баду ноутбук в два раза шире, чем он.
А что там сейчас самое модное? Я из жабазагона, если что. За тренда не слежу.
Любая, в которой тебе будет удобно. Sublime Text, если созрел то может Vim/Neovim, Emacs. VSCode - это днище и вообще зашквар на электроне.
в телеге найди, там есть пиратский канал по книгам суслика. я там нашел.
>VSCode - это днище и вообще зашквар на электроне.
Джва чифирка эту господину! Более того у саблайма есть прекрасные сниппеты, макросы.
Ну так я об этом и говорил.
У тебя будет сервис, который умеет синхронно ходить в кучу сервисов, мерджит-преобразует и всё такое, на го.
Понадобились данные - один раз сходил в соседний под в этот сервис и получил их, а потом отдал. Пыха здесь чисто как прослойка нужна, чтобы бизнес-логику писать с использованием этих данных.
Вопрос привычки. После питона меня коробит от всего.
Больно у него много классных возможностей по переопределение синтаксиса, множественного наследования, метакласмов.
После этого на чем-то урезанном, вроде джава или го, писать больно.
Но со временем втянулся. Ничего страшного, не так красиво и лаконично, но можно сделать что угодно.
в том, что ты осознанно отпустишь какую-то блокирующую часть кода и пойдешь дальше, например у тебя какая-то долгая операция и ты хочешь грейсфул завершить прилож за предсказуемое время, при этом на результат этой операции тебе впринципе пофиг
и, это конечно костыль, но реальная жизнь такова
>>665291
акцент на асинхронную работу с ио, которого у тебя не было, а это дает наибольший вклад в итоговый перформанс
Видосики на ютубе на русском по запросу "docker".
>мертый тред as a service
Что ты знаешь о смерти ? хочешь увидеть смерть, иди в хаскель тред.
>увидеть смерть, иди в хаскель тред.
Что ты знаешь о смерти ? хочешь увидеть смерть, иди в жулиа тред.
И я здесь имею ввиду не только if err != nil { return err }, но и что дальше делать с этой err, что делать, если тебе никак нельзя тут получить err и тд?
Ты не видишь этот маскот?
Если ошибка появилась там, где не должно быть ошибки, то одно из двух:
1. система плохо спроектирована
2. сдохло железо
Оба случая - без вариантов паника, тут уже не до ошибок.
стоит ли запускать миграции из приложения при его запуске или лучше отдельно запускать команду?
> кто как работает с миграциями? какой пакет для этого используете?
почитай прошлый тред, там вроде goose рекоммендовали поддерживаю
> стоит ли запускать миграции из приложения при его запуске или лучше отдельно запускать команду?
во-первых, однозначно не нужно встраивать в запуск приложения инструмент миграции, во-вторых, запускать ли приложение через `sh -c "migrate-cmd && app-start-cmd"` сильно зависит от.
Посрать
Илья, в прошлом треде вопрос обсуждался, тред еще жив, смотрите там
>балансировщик нагрузки
Ну да, но в случае одной ноды - есть ли польза? Go код и так умеет утилизироваь все ядра. Я нашел только одну причину для этого - нужникс, наверное, будет проще в эксплуатации, его можно более гибко тюнить чем мой бинарь
>ставь апач
А это еще зачем? Я думал он нужен только для того, чтобы php/python/perl скрипты запускать, а нужникс - более производительный
>перевожу микросервисы с монги на постгресс
А что за такой массовый хейт и слив с монги? Чем она не устраивает?
Курсы от ОТУСа норм?
И как определить, что я уже могу считаться джуном го? Какую приложуху надо написать как пет? в пыхе это круд со студентами
у отуса вебинары, со всеми вытекающими. чмекающие, пукающие лекторы с уёбищными микрофонами, чсвшные уёбки вместо студентов, дерейлящие занятия нерелейтед вопросами, половина лекторов нихуя не флюент в пыще и тому подобное. сама программа норм конеш
У отуса странная тян, которой задают вопросы, она говорит "окей, отвечу в конце занятия", в конце занятия говорит "окей, давайте посмотрим в исходники го", ничего там не находит и прощается.
Она не нужна в большинстве случаев
>оу, интересно, распишешь кейсы?
Я знаю только два:
1) Тебе нужен high availability, у SQL баз с этим довольно плохо
2) Когда ты уперся в скорость записи в SQL базу
Для большинства проектов эти вещи вообще не актуальны
Так к гуглу и без этого очереди желающих выстраиваются. К тому же Go после сиобразных языков выучивается быстро. Поэтому не вижу смысла тратить кучу бабла на широкую раскрутку языка из-за этого. Должны быть какие-то более весомые причины.
Кстати, а скорость записи - это актуально в принципе? Разве скорость чтения не гораздо важнее?
Если бы гугл не вкладывал бабло, то все сидели бы на котлине, а раз не все сидят на котлине, значит гугл вкладывает бабло, очевидно же.
Но гугл поддерживает котлин тоже
У кей-велью баз есть свои задачи конечно, просто в какой-то момент монга была под лютым хайпом и все вебдебилы бросились заменять нормальные реляционки на доступные своим имбецильным мозгам хеш-таблицы там где надо и не надо. В ответ на это пошла волна хейта, вот осадок до сих пор остался.
Вообще данные лучше держать в хорошо структурированном и нормализованном виде, пока это возможно и не создаёт проблем в поддержке. Такой подход сам по себе позволяет избежать множества ошибок связанных с данными и применить определенные оптимизации. Потом, если где-то упираешься, можно частично денормализовать критичные участки или вообще вынести их куда-то. Использование же безсхемной базы по дефолту подразумевает слабое структурирование, даже тех данных, что можно было бы структурировать гораздо строже. Это даёт возможность бездумно хуярить хуяк-хуяк в продакшн на старте, чем вебдибилы обычно активно пользуются, а потом насасываются на поддержке этого ебаного хаоса.
Нет смысла быстро-быстро писать данные как попало, если потом их надо обрабатывать, а ты ничего не можешь про них сказать, кроме того что это json с полем id. С таким же успехом можно и в /dev/null писать, это еще быстрее.
Почему это именно в гугл? Подсадить всех на свой язычок, чтобы, когда наберётся критическая масса кодеров на нём, продавливать своё видение того, как должно развиваться IT. Это как с хромом.
Сильно сомневаюсь, что один или даже несколько языков могут определить развитие IT
Си и фортран определили.
Хром монетизируется за счёт зондов и рекламы. К тому же в интересах тотальной слежки за своими гражданами и всем миром американское правительство готово выделить гуглу любые деньги. То есть даже без рекламы хромой выживет. Но Go для подобного плохо подходит, ибо примитивный. Для этого лучше подходит переусложнённый жирнючий язычок, чтобы во всех его потрохах никто не вздумал серьёзно копаться.
Почему сразу раст?
Гугл как таковой держится в основном за счёт рекламы. И работает он в первую очередь на себя, а не на американское правительство.
> Но Go для подобного плохо подходит, ибо примитивный.
Наоборот, язык должен быть максимально простой, чтобы как можно больше вкатывальщиков ринулось его изучать. Дело даже не в потенциальном наличии зондов в компиляторе пщ, а в самом факте, что на этом языке будут писать именно так, как хочет гугл.
> акцент на асинхронную работу с ио, которого у тебя не было, а это дает наибольший вклад в итоговый перформанс
Не особенно корректно, nginx с достаточным размером пула обрабатывает конские потоки трафика, а асинхронная работа с ио нужна очень даже не всегда.
Как правило это выглядит, как: пришёл запрос, ты последовательно сходил в несколько сервисов, отдал ответ. Тут нечего распараллеливать, а последовательные вызовы чего угодно без сложных расчётов и загрузки процессора пыха будет делать достаточно быстро. Зато писать на ней всякие стратегии (то есть бизнес логику) ты будешь быстрее, чем на го.
Блог отуса на хабре - полная херня, как будто студенты пишут, 90% воды, 10% копипаста с helloworld'ов. Я бы не рекомендовал.
Пф, естественно актуально.
Очень часто данные можно обработать потом, а вот сохранить их для обработки ты должен сразу. Возьми, к примеру, чат - твоё сообщение может долететь к собеседникам не мгновенно, а через несколько секунд, но сохранить его ты должен моментально, чтобы потом прососать по всем системам доставки данных, кэшам, etc. Отсюда ты получаешь огромный поток данных на запись (куча людей что-то пишет).
Но вообще какой-нибудь постгрес способен писать данные очень быстро, при отсутствии внешних ключей, уникальных ключей и прочей необходимости общаться с нодами.
Плюс же монги - это возможность удобно поднимать её в кластерном режиме, поднять так же просто какую-нибудь галеру или местер-мастер постгреса ты не сможешь.
Спасибо за ответ
Я понимаю, но про видеокурсы я ничего сказать не могу, а вот блог видел. Могу попытаться сделать вывод, что если их блог - полная херня, то и вероятно видеокурсы у них тоже не очень.
Актуально, но немного на больших объемах трафика.
Чтение ты можешь сейлить практически до бесконечности даже с классическими SQL базами при помощи каскадной репликации. А с записью - все сложнее, ее практически невозможно масштабировать горизонтально, все что мы можем - это по немногу отказываться от триггеров, foreign key'ев или даже индексов
анон ты немножно ебнутый, в ответе был Head First Go с переводом на русиш, я именно его и ищу
Покажи код проекта.
Нет, это заёбывает всех нормальных людей.
ну иногда заебывает а вообще прикольна же. лучше чем уродливые try except с отступами
Временами заебывает, особенно если нормально обрабатывать (т.е. добавлять контекст к ошибке на каждом этапе)
Но ничего лучше не придумали, на самом деле, ведь try/catch очень неудобный в условиях кучи горутин, у которых еще очень разная иерархия/время жизни/важность может быть
В каком месте это лучше? Логика вперемешку с обработкой ошибок, из-за которой код потом становится нечитаемым, и приходится городить хуиту типа
func check(value interface{}, err error) interface{} {
if (err != nil) { log.Fatal(err) }
return value
}
a := check(foo()).(int)
b := check(bar()).(string)
Кто тебе виноват, что ты городишь хуиту. Взял зачем-то спрятал ошибку, теперь тот, кто будет читать твой код, должен будет держать эту функцию check в голове. А если еррор не фатальный? Вводить еще одну чекалку? Каша какая-то получится.
Плюсовики уже четверть века не могут в своем синтаксисе разобраться. Только чуть-чуть поймут, как новый стандарт выходит.
Дело в том, что если запрос не нашел данные и err != nil, в случае возврата значения мне необходимо вернуть структуру с нулевыми значениями у полей + ошибку. В случае же с возвратом указателя я могу вернуть nil + ошибку, что является своего рода подстраховкой на случай, если кто-то не будет проверять наличие ошибки, вызывая мой метод.
Вопрос: как лучше поступить в этой ситуации и стоит ли использовать указатель исключительно ради возможности возврата nil?
https://learnxinyminutes.com/docs/go/
Никак, лол. Го 2 где-то в прекрасном далёке, и, похоже, его довольно сильно переделают, и придётся учить заново.
https://gobyexample.com/collection-functions
Ещё сортировки зацени, ваше пиздец: https://gobyexample.com/sorting-by-functions
Живётся так же, как жилось в джаве до добавления дженериков. В джаве был Object, а тут есть interface{}. Кастить приходится руками, и типобезопасность идёт нахуй.
>Вопрос: как лучше поступить в этой ситуации и стоит ли использовать указатель исключительно ради возможности возврата nil?
Как верно уже сказали - не стоит, конвенционально считаеться, что если ты вернул не нулевую ошибку - значит ты вернешь нулевые остальные результаты, если не укажешь обратное в документации (как с io.Writer)
Интересно, что вообще делает Go в разделе Enterprise
Столько предположений/допущений для относительно молодого статически типизированного языка - это кекус, конечно. Result нинужен, будем четыре состояния нахуй таскать.
Ну да, гораздо лучше бросить эксепшон, который кто-нибудь проебет и он внезапно сломает более высокий уровень абстракции.
я просто уточню, для остальных, чтобы понимали - дело не в инструменте(языке), дело в прослойке между клавиатурой и монитором
Вот в этом отчасти и заключался вопрос: разве является нормой то, что по сути контракт в этом случае держится на честном слове?
>стоит ли запускать миграции из приложения при его запуске или лучше отдельно запускать команду?
На нормальной галере прав на изменение схемы данных в продовой дб тебе никто не даст, поэтому миграции обычно накатываются при деплое в сиай сиди, но блять никак не при запуске.
>расширение go для vscode не работает с go modules
>gopls работает с go modules, но не подсказывает для неимпортированных пекеджей
Ну, интерфесы везде так работают - 3 строки сигнатуры и 30 строк комментария как правильно его имплементировать. Тут хотя бы компилятор типы проверяет, а в питоне каком-нибуть - вообще все взаимодействие с фреймворками на договоренностях держится
>>677273
>Подходит ли этот язык для низкоуровневых вещей?
Да, относительно удобно с сисколами работать. Или можно заинкулдить c/c++ либу через CGO, но там свои нюансы
>Написание читов
Не эксперт по этой теме, но я думаю что какой-нибуть ArtMoney можно вообще на чем угодно написать. Любой адекватный язык имеет необходимые возможности и/или может подключить код на си, который это умеет.
>вирусов
Про это я еще меньше знаю, но думаю го может быть удобный в том, что у тебя на выходе может быть бинарь без каких-либо системных зависимостей, но с другой стороны - ты получаешь на выходе довольно жирный бинарь - порядка 2-х мегабайт на хелоуворлд.
Большое спасибо за адекватный ответ)
Чтобы использовать какую-то уязвимость, писать придется на языках, свойственных целевой платформе: файрфокс - жопаскрипт, реляционная бдшка - эскьюэл. Уязвимость вообще может проявляться как реакция на определенные данные, тогда тут вообще никакой язык.
Чем слайс не вектор? Кроме убогого синтаксиса и отсутствия нормальных итераторов.
Ясное дело, что для того чтобы сделать условную [no]SQL-инекцию - тебе нужно писать [no]SQL запрос. Тут же вопрос в другом - можно ли использовать го чтобы отправлять эти запросы в квери-параметрах к какому-нибуть серверу. Я думаю можно, но вирус я бы писал на расте, наверное
к тому что обвязку надо писать всю самому, итератор вообще хуй знает как без арифметики указателей
> можно ли использовать го чтобы отправлять эти запросы в квери-параметрах к какому-нибуть серверу
Для этого не то что го - баша с курлом хватит.
Я не тот, кто задавал оригинальный вопрос, я просто поделился своими мыслями на тему того, подходит ли го под указаные задачи
Да вроде ботов нормально на нем делать. У меня есть пара-тройка, прикидывал, как их примерно на нем переписать, можно. Но по идее вирусы могут работать на дырках в либах со стандартным соглашением о вызовах и традиционным подходом к памяти. В go это все отличается. А либ таких дохера, они везде. А вообще вся эта вредоносная хуета это очень это очень разные вещи могут быть. Длч чего-то подойдет, условно там сервис для винды я бы не стал на нем писать.
Где должны лежать исходники программы на го? в $gopath/src? Или похуй где?
Если моя программа размазана по нескольким файлам как мне делать импорты, если моя программа будет неходиться ВНЕ gopath?
Ебать, это такие банальные вопросы, но у меня уже столько времени рвет от них жопу! Я просто хочу узнать, как правильно сделать, и что б пацаны не засмеяли. Я нахуй всё, устал.
Алсо, что такое эти ваши гомодулес и какого хуя gopls до сих пор их не поддерживает?
Ладно, второе это риторический вопрос о наболевшем.
https://play.golang.org/p/2rK6cRbsq82, если я правильно понял тебя
>>677933
Какую версию юзаешь?
>>677935
> что такое эти ваши гомодулес
Это то, что тебе сейчас как раз нужно
>какого хуя gopls до сих пор их не поддерживает?
Поддерживает, при том давно. Ты go mod init делал?
> Поддерживает, при том давно. Ты go mod init делал?
Так это надо в каждой папке внутри моего проекта "hello-wrot" делать? GoLand просто не требует никаких дополнительных файлов.
> Какую версию юзаешь?
1.14
> Это то, что тебе сейчас как раз нужно
Ну и самый главный вопрос. Как мне тогда в пакете main получить доступ к функциям из вложенный "подпакетов"? Мне напрямую что ли импортировать надо
import "/home/$user/hello-wrot/nestedppackage"
и только потом nestedpackage.Func?
У меня просто горит от того, что о том как нужно делать нигде не сказано. Тут говорят надо ложить исходники в $GOPATH, там говорят пох юзайте гомодули, гомомодули не поддерживаются гугловским инструментарием, (один из разрабов писал что типа WIP эта фича в репах к VSCode'у).
>Так это надо в каждой папке внутри моего проекта "hello-wrot" делать?
Только в корне
>Ну и самый главный вопрос. Как мне тогда в пакете main получить доступ к функциям из вложенный "подпакетов"?
Путь к папке относительно go.mod файла
>Тут говорят надо ложить исходники в $GOPATH
Уже не нужно
>один из разрабов писал что типа WIP эта фича в репах к VSCode'у
Велком ту опенсорс
Спасибо за ответы. АТДУШИ!
> Велком ту опенсорс
Ну попенсорс попенсорсом, но гугл не самая маленькам компания на земле.
Здесь нормально написано:
https://eli.thegreenplace.net/2019/simple-go-project-layout-with-modules/
Неужели так раньше это всё и работало?
>>678023
Спасибо, сейчас и это почитаю.
Че в этот раз-то блядь не так????
In general import paths should either be in the standard library or should start with a domain name. In effect the go tool treats all paths starting with "mod" as being in the standard library, but none of those paths may be imported.
Я это читал, но это же какой-то сюр! Я не могу свое приложение по папкам раскидать? Мне для каждой папки надо реп заводить что ли?
Для корня проекта формально нужен репозиторий. Можешь написать какой-нибудь домен перед именем модуля, должно прокатить. Но проще сделать приватную репу на гитхабе, они сейчас все равно безлимитные.
Я даже хз как на это реагировать, если честно. Ну, типа язык, сам компилятор принуждает меня заводить реп хотя я еще даже ничего не начал писать.
Большое спасибо за ответы, конечно, но типа как вообще сообщество с этим справляется? Это норм практика и я один такой неандерталец с этого бомблю?
Или это тырпрайс сектор такой сурьёзный?
Ну да, гитхаб, семвер, ответственность перед сообществом.
>А тут читаю статью на хабре про гомомодули, а там повествование ведется в таком тоне, будто раньше как бы и не было вообще никакой системы управления версий.
Да, все так. Модули появились относительно недавно, стабильную версию модулей вообще только в 1.14 (текущая версия) ввели. До этого все держалось на соглашении о том, что если меняеться сигнатура/поведение - нужно менять import path, но это не работало и сначала появился вендоринг, а затем - модули.
>>678053
Там довольно много всего - не как в питоне, конечно, но основное есть. Если бы я делал язык - я много чего туда бы не ложил из того что там есть.
> хз как на это реагировать, если честно
Это ощущение не исчезнет, в пщ всё сделано вот так вот. Здесь на все вещи Единственный Правильный Взгляд, с которым ты обязан согласиться, чтобы на этом язычке хоть что-то писать.
Тебя же никто не заставляет создавать гитхаб репо и пушить туда код. Тебе достаточно просто написать туда гитхаб-лайк URL, относись к этому как указанию уникального названия репозитория
А ещё можно слепить дженерики из interface{}, эксепшены из хуй пойми чего, рекурсивные импорты из огромных пакетов и dependency injection из глобальных переменных. Просто произведение искусства какое-то, а не язык.
>А ещё можно слепить дженерики из interface{}
нельзя
>эксепшены из хуй пойми чего
нельзя
>рекурсивные импорты из огромных пакетов
не знаю
>dependency injection из глобальных переменных
Зачем?
Тут вопрос в том, хочешь ли ты хранить состояние авторизации на клиенте или на сервере
Оно же в любом случае на сервере:
1. Если с куками, то в куке лежит айдишник сессии на сервере. Сервер нашел сессию - пользователь авторизован.
2. Если с токенами, то токен клиент передает в хедере. Токен есть и правильно расшифровывается - пользователь авторизован.
Ну то есть аутентифицирован, а не авторизован.
В первом случае сервер хранит состояние, а во втором - вся нужная информация храниться на клиенте, и для получения информации о правах доступа или чем-то подобном не нужно ходить лишний раз ходить на диск за этим
Если так принято, то думаю я смогу смириться, хоть и больно. Человек ко всему привыкает.
>>678457
Следует не с того места начать учить язык и порой нужно много боли пройти, чтобы какие-то прописные истины понять/выучить. Но судя по оф. доке они и сами не рады стремаются своего решения. Ах, если бы я начал читать эту статью два месяца назад, а не туториал/книгу/пердолинг с тулзами.
Начало изучения чего угодно - дело непростое в любом случае. А тут еще и молодой язык, который довольно активно развиваеться
Stateless подразумевает отсутствие состояния на уровне протокола (например, у FTP и SSH состояние есть), с внутренним состоянием сервера это никак не связано.
мимо
причем тут внутреннее состояние сервера, если я говорю про хранение состояния клиента на сервере?
stateless подразумевает отсутствие инфы о состоянии клиента
Да.
>>678946
тащем-то языку уже 10 лет и проектируют его далеко не самые глупые люди, поэтому " Единственный Правильный Взгляд" в какой-то мере присутсвует, но пока у тебя нет достаточного опыта и понимания того, что тебе действительно нужно хотя бы в какой-то временной перспективе, я бы с ним не спорил и принимал за best-practice и копил бы опыт
>>678149
а то в жаве не так
Ок, даже в базе данных ничего теперь не буду хранить, а рест не кошерный получится.
Скорее всего хуёво, у го жирный рантайм и его весь надо затолкать в васм. Тот случай когда раст или сишечка лучше.
> а то в жаве не так
Не так. Репозиторий системы контроля версий там не нужен вообще, а не прибитый гвоздями к компилятору Git.
Двачую, 40 лет пишу сайты на си.
И в памяти тоже ничего не храни, по тому что тоже state
~2MB для современной SPA это много, но не критично. Вопрос только в том, какой профит в сравнении с js/ts ты получаешь и стоит ли оно того (я думаю - нет)
Не взлетит, все равно нужен STUN/TURN Server
Что еще почитать? И есть ли вообще то, о чем читать? Или это и есть весь язык, и я выучил го за пару вечеров?
>Или это и есть весь язык, и я выучил го за пару вечеров?
В целом - да. Можешь еще https://habr.com/ru/company/mailru/blog/314804/ прочитать и идти пилить проекты
>как это будет работать?
Техзадание написать? Ну вот просто мысль и все. А как это не будет работать в таком случае?
>>679179
У тебя в голове атоматически происходит исследование, как все, что ты уже знаешь и делал, соотносится с новоизучаемым языком. Надо попробовать что-то свое уже имеющееся переписать на этом языке. А так вообще да, апология Go в том числе в его простоте.
Effective go ещё почитай
Ты ожидал чего-то другого от процедурного языка?
К этому можно относиться, как к sizeof - похоже на функцию, но на самом деле нет.
Нет.
Дело в тех, кто код ревью не проводит или проводит сквозь пальцы.
Триллиарды долларов приносит не чистый код, а идея. Всем насрать на идеальный код, лишь бы это приносило много денег, имеем то, что имеем. Страдания 300к программистов никого не волнует
Нет, это отдельный кейворд, встроенный в сам язык. Как while или if.
Проблемы начинаются, когда у тебя в апишке становится больше трех-четырех доменов, тебе надо это деплоить в разные поды на кубере, рефакторить всю лапшу в солид и чистую архитектуру, вот за это уже деньги платят, а не за то что ты умеешь реквест разбирать и в базу ходить.
Ты видишь принципиальную разницу от того, как получать длину слайса?
>Джанга 3 вон уже прикручивает асинхронность чуть-по-чуть.
В смысле? Давно уже все прикручено.
https://channels.readthedocs.io/en/latest/introduction.html
>>662157
>А вот когда попрёт бизнес-логика и нужно будет провести 100500 побочных операций, сравнений и запросов в базу на один запрос извне - вот тогда и окажется, что го или джава на пару порядков быстрее.
Ты че там куришь? Node.js в однопоточном режиме давно уже быстрее джавы.
>В смысле? Давно уже все прикручено.
Когда будут асинхронные вьюшки и запросы к бд, тогда и приходите.
>Когда будут асинхронные вьюшки и запросы к бд, тогда и приходите.
Мне вообще пихуй, от пистона отказался 2 года назад.
А чего тогда начал про питон писать?
Книга Кернигана
По-быстрому - tour of go
Что означает "для питонистов"? Типа питонисты или перловики такие ущербные, что им надо по-особому объяснять? Всегда было, что хочешь выучить язык - читаешь учебник и пишешь код. Врядли тебе надо выучить го прям на завтра, пару-тройку недель для ознакомления можно потратить.
Тупо просматриваешь по абзацу за секунду и читаешь внимательно, если заметил что-то незнакомое. В отличие от вкатывальщиков, которым надо мало того что читать внимательно всегда, так ещё и сидеть и обдумывать прочитанное.
> Ты че там куришь? Node.js в однопоточном режиме давно уже быстрее джавы.
Надо смотреть бенчмарки, полюбому как обычно на джаве наговнокодили или настроили вм неправильно.
Это невозможно хотя бы из-за особенностей jit'а на джаве и в ноде.
https://www.zdnet.com/article/developers-say-googles-go-is-most-sought-after-programming-language-of-2020
Есть разные задачи и разные требования к производительности - например, кому-то нормально использовать по воркеру на соединение, а у кого-то есть задача держать 10к соединений на машину. При этом в этом случае ты упираешься не в скорость обработки (все равно бекенд значительную часть времени тупо ждет ответа от базы или другого сервиса), а в количество памяти, которое тебе нужно на обработку одного запроса
$ go tool
addr2line
asm
buildid
cgo
compile
cover
dist
doc
fix
link
nm
objdump
pack
pprof
test2json
trace
vet
Почему не видит? Хотя ls -a $GOPATH/bin показывает tour
Просто добавь в $PATH и не еби мозгу
Где такое написано?
>To run the tour locally, you'll need to first install Go and then run:
>go get golang.org/x/tour
>This will place a tour binary in your workspace's bin directory.
Там ничего не сказано про $(go env GOROOT)/pkg/tool/$(go env GOOS)_$(go env GOARCH)/
Привет, ты что охуел.
grpc, lul
>>680878
1.1, пёс
А у всех gopls норм работает? Хочется на карантине экстрима, съезжаю с голанда на вим + ale, и впринципе gopls работает норм, но в какой-то момент просто перестает работать, те ни синтаксис, ни навигация по коду, ничего не работает, а сам процесс висит и в логах пусто, решается рестартом, но снова до какого-то момента.
wsarecv: An existing connection was forcibly closed by the remote host
exit status 1
Как сделать так, чтобы сервер не падал при дисконекте клиента и как правильно в таком случае дисконектиться клиенту?
Альтернатива lua/wren.
Когда прочитал Crafting Interpreters и побежал делать новый V
> Crafting Interpreters
Спасибо за годноту. Книгу дракона я не осилил, но рекурсивный спуск понял и пишу велосипеды в стол.
мимо
Вот мне сейчас нужно кое что написать чтобы тестовыми данными заполнить БД, и я думаю писать это на го или питоне.
Не, не так:
У меня прям какие-то предрассудки, что компилируемые языки не должны использоваться для мелких несерьезных задач. Отговори меня, двачик!
Спасибо гач. Пока тебе писал уже для себя решил, что в моей конкретной задаче лучше будет использовать go. Но если ты как-то это это прокомментируешь буду рад.
>>683445
Если нужно набросать какой-нибудь одноразовый скрипт, а долго сидеть и вникать не охота, бери то, что лучше знаешь и на чём писать будет удобнее. Простые скрипты, как правило, пишутся быстрее, но вот допустим знаешь ты Go в совершенстве, а питона не знаешь вообще, тогда быстрее напишешь на Go, чем выучишь питон. И наоборот.
Спасибо анончик. Тоже так подумал.
А чего это у меня тред как удаленый показывается?
Сборщик мусора сработал
Это баг двоща. И ладно бы треды просто были зачёркнутые, так они ещё и исчезают из избранного через время, блеать.
Какой-то ебанутый баг. В тред захожу, он ведет на 404 со страницей архива. Через другой браузер заходит. Вопрос выше написал через страницу со списком всех тредов.
Причём бывает, что и открытие в приватной вкладке не помогает, только другой браузер. Как будто на сервере прямо в коде указано, что при каких-то условиях нужно перенаправлять на архив именно для такого IP и именно для такого-то браузера.
>могут или не могут поддерживать методы интерфейса, в зависимости от того, как укажем
Покажи пример
Как я понял, он хочет чтобы надо было явно указывать, типа
type User struct implements Marshaller {
}
до сих пор забавляют ребята, которые не разобрались и обвиняют в этом мир вокруг, компилятор же забагованный и тебя по-фану дрочит
Во многих тредах сейчас затишье, а этот и так не был особо активным.
Пиши вопрос про модули, может кто-то ответит.
Собственно, почитал о модулях. Вроде аж три варианта работы. И что теперь не нужно проект держать на диске ака github.org/huila/proekt
Только сама работа не совсем понятна. Ожидал как в питоне чтоб было, requirements содержит имя и номер версии. А вычитал какую-то мудоту. Меняешь мажорную версию - меняешь имя импорта. Да и вообще без тегов - никуда. И помещать теперь строго вне GOPATH. Пиздец какой-то.
Нормально -- go mod, остальное считай DEPRICATED
> содержит имя и номер версии
В go.mod так же. Почитай про модули в Go.
> Меняешь мажорную версию - меняешь имя импорта.
До появления модулей действительно так и было. Тогда и вендоринг был. Сейчас на нужно.
> без тегов - никуда.
Да, версионирование в Go привязано к тегам Git.
> И помещать теперь строго вне GOPATH.
Воспринимай это как питоний site-packages, то есть как некий общесистемный локальный репозиторий, о котором знать ничего не надо, а система управления зависимостями сам всё притащит. Хотя это больше на жабий Maven похоже.
Так вот, переходя к делу. Планирую менять работу, и стою сейчас на распутье. Пока я молодой недомиддл с синдромом самозванца, и могу менять рабочий стек без особой потери в зарплате. И чем дальше я смотрю в сторону плюсов, тем меньше мне хочется истязать себя move-семантикой, template наркоманией, компайл-тайм вычислениями, UB, boost'ом и т.д. Хочется уйти в тихую гавань с достойной зарплатой и спокойно пилить микросервисы, ходить в базу и запихивать это все в докер.
Так вот, сам вопрос: стоит ли мне припиздеть в резюме о своем опыте бэка на Go, чтобы попытаться вкатиться к вам? И что нужно знать для успешной коммерческой разработки? Пока вижу такой стек для миддла: Postgre, gRPC, protobuf, линуксы с докерами; задрочить, чтобы от зубов отскакивало: SQL, HTTP, REST, горутины, каналы, базовые Go-пакеты, ну и умение вертеть деревья маркером на доске. Что-нибудь еще не забыл?
>Что-нибудь еще не забыл?
>SQL, HTTP, REST
Имплементация всего этого на Go, то есть драйвера, роутеры и тд
Еще дополнительно: тесты в go, go mod, golang project struct, dependency injection.
Для начала ты напиши хотя бы один небольшой проект на Go, чтобы понимать, как там все устроено
>стоит ли мне припиздеть в резюме о своем опыте бэка на Go
Ясен пень стоит. Никто не проверит. Я сам также писал на с++, потом перекотился в питюн. Для этого по вечерам его изучал.
>REST
Фи, это шо? GraphQL рулет.
Какие задачи для го вообще являются основными? Начал учить, потому что хочу в тырпрайс, но не хочу жабу (возможно зря), и быть немного ближе к железу после питона.
Я правильно сделал выбор?
>быть немного ближе к железу
неверно. Хоть Го и похож на Си, но для задач с железом применяется редко
>Какие задачи для го вообще являются основными?
Бэкенд для всяких вебсервисов
Будет клепать микросервисы на жабе.
Я серьезно, мне интересно, почему он популярен
мне нравится, что не надо ебаться с установкой прокси и с модельками для парсинга ответов жсона(как в жабе)
мимо автомакака
В Джаве тоже есть рефлексия, и наверняка есть библиотеки для парсинга джсонов в объекты (не джавист).
есть либы для парсинга, но приходится создавать +100500 классов, если в ответе есть вложенности(даже учитывая, что есть конвертеры json2pojo, все равно мегауныло)
Никто не заставляет, можно спарсить в мапу. Но никакой валидации, да и неудобно.
Простой читаемый код, что проекта, что библиотек.
Хорошая конкурентная модель, без двуцветных функций асинка.
Бусинес?
>>686884
Да вот если честно продумываю. Жаба все таки уже очень долго живёт, сейчас ей вторую жизнь дали в лице котлина. Много бородатых книг для неё написано. А я сейчас репу чешу и думаю почему я вдруг решил го учить.
Что-то мне кажется жабистом легче на галере затеряться и вообще работу найти чём го разработчиком.
Видимо после окончания моего текущего проекта на го надо будет попробовать сделать что-то и на котлине.
>надо будет попробовать сделать что-то и на котлине.
так котлин же сейчас только на андроиде? в тырпрайзе жаба+спринг
Да говорят же что это те же яйца только в профиль. Ну в общем я всерьёз хотел с питона на го укатиться, но теперь задумался. Обычно такие думы затягиваются надолго.
Так, умники, дайте решение
https://www.hackerrank.com/challenges/circular-array-rotation/
Простейшая же задача.
Хотел написать решение, но задача просто элементарная, чтобы с такой помогать, сам решай
Backend meetup
Ruby, GO, Rust, Node.js, Python, Elixir
https://metaconf.net/backend-meetup-2020
Че-то ну совсем такое себе, посмотрите лучше на митап от Go Yola и Golang Kazan, который 30го будет
Хочу в тырпрайс затеряться на большой галере. С такими целями наверняка надо было учить жабу.
Но пока что по ощущениям пщ это воплощение моих текущих желаний:
- стандартный автоформат кода. Никаких срачей;
- минимализм, максимальная простота: я не хочу лишний раз думать каким способом реализовать мою задачу. хочу чтобы способ был один.
- тырпрайс
- статическая типизация? (ещё не распробовал)
Вообще хочу поделиться. Я писал только не питоне и жс, и вот уже какое-то время начал писать на го, а более менее активно -- последнюю неделю.
Это прекрасное чувство, можно практически фейсроллить по клавиатуре, IDE сама подскажет где ошибки, после точки почти всегда знает Что следует даже с самой ебучей вложенностью. В питоне мне нужно тупо лезть в дебаггер, чтобы узнать че там в ебучую функцию приходит, а тут все известно. Ещё мне очень нравится дока. Классно зделоли!
Код запускается и работает без ошибок в разы чаще, чем на питоне.
Пишу сейчас бота для телеги, и мне нужно было быстро написать скрипт для того же бота.
Так вот если в го мне нужно провести 2 круга перезапуска кода, чтобы он работал, то в питоне 5-7. И ошибки зачастую связаны с типами, а не логикой.
Я не говорю, что питон плохой. Питон прекрасен и я его очень люблю. В сравнении теперь ощущается, почему его так назвали ИЗ-ЗА ГИБКОСТИ, ПОНЯЛИ))) ПИТОН!! , но писать со строгой типизацией это совсем другие ощущения.
Мне показалось, что написание кода на го отнимает меньше энергии чем написание не питоне. Хотя конечно я только начал.
Вообще хочу попробовать. Хули нет?
ладно, прекращаю семенствовать
Тоже записался на эту штуку
Задачки не особо сложные, похожи на задачи из бесплатного курса на степике. Только требования к оптимизации более жесткие
А нет ли вообще какого-то дайджеста программ по go? начал изучать на курсере, но вот такие программы - как манна небесная
Наверное только одному тебе смысл понятен.
Берешь элемент первого множества и делаешь какой-нибудь reflect.DeepEqual этого элемента со всеми элементами второго множества, если не было ни одного равенства, то аппендишь его в разницу.
Проясните, что за новый пакет errors? Который умеет только Is и Unwrap?
Чо за хуйня? Где старый пакет (он же в стд был втащен, нет?) с функцией Wrap, который позволял добавить к ошибке метаинформацию?
Какого Х конфликтующее имя?
Как этим пользоваться?
Ого, ты пишешь все полностью сам, ты такой ПРОГРАММИСТ!
Ну так, гошники вербозность и ограниченность называют простотой, с добрым утром.
Позволю себе спросить. Я очередной вкатыш, но у меня не горит 1- МЕСЯЦА ВКАТИТЬСЯ. Сейчас работаю по другую сторону - пишу тз для погомистов, анализирую и все такое. С зп все заебись, и ооооочень не хочется вкатываться на зп джуна.
Я понимаю, что вообще охуели эти вкатыши, но есть ли возможность сидя дома, не меняя работу (на фриланс не надеюсь), дорасти до уровня миддила из дома?
Других языков море, вакансий больше, но не хочу с триллиардом народу конкурировать.
ps почему в США, Англии и прочих странах - go самый востребованный? Я так понимаю, что речь не про джунов, а про топовых помидоров и тимлидов?
Смотивировал анон выше, который писал, что джунов найти не могут в РФ
>Я понимаю, что вообще охуели эти вкатыши, но есть ли возможность сидя дома, не меняя работу (на фриланс не надеюсь), дорасти до уровня миддила из дома?
Нельзя. Миддл - это не уровень знания языка, а уровень умения решать задачи. Да никто не возьмет прогера без коммерческого опыта разработки на мидла. А при текущей экономической ситуации, даже на джунов не берут без опыта
>>690400
>почему в США, Англии и прочих странах - go самый востребованный?
Не самый востребованный, а самый высокооплачиваемый. Скорее всего, потому что го хорошо подошел на роль языка для следующих целей:
1) Написания прототипов для стартапов
2) Переписывание легаси на php/python/java под микросервисы и тд.
>курс озона по голангу
>курс на степике по голангу
>тред по голангу
>На каком языке решал?
Ну даже не знаю, что тебе ответить...
Спасибо за ответ
Все выглядит, как кино "Вкатышам в го тут не место", да и вообще теперь нигде не место
Вкатыши нужны
- большим компаниям, у которых есть ресурсы, что бы научить пол себя и поездить на шее, пока не опомнится
- галерам. Можно платить мизер, а продавать как ммдлов.
- маленьким провинциальным компаниям. Потому что нет у них выбора, и приходится работать с теми, кто есть
>- маленьким провинциальным компаниям. Потому что нет у них выбора, и приходится работать с теми, кто есть
Спорный момент, кстати. В моей мухосрани каждый год выпускников около-айтишных шараг больше чем рабочих мест, и по этому даже с образованием многие идут катриджи заправлять. А вкатышей даже для этого не берут. Я так и не нашел работу и решил понаехать в ДС чтобы вкатиться
Выпускники вузов вообще никуя не знают.
Вкатыши после курсов хотя бы формошлепить умеют и с какой стороны гит держать.
Спасибо еще раз
Бля, просто крик души - не выбрал погромирование в юношестве, и теперь в 27 уже хуй сменишь, либо только на зп джуна (и нет, это не выебон и не высокое самонение)
Не буду настаивать, я и большинство моих знакомых - как раз таки из команды вкатышей
Да ладно, там же на любом можно. Просто поинтересовался.
Все задачи с первого раза решил? Я чёт так волнуюсь как будто бабу первый раз за руку взял. Чёт я нежный какой-то слишком.
Ну так и есть.
Да и нахуя менять, если ты и так как бизнес-аналитик работаешь? Зарплата у тебя уже неплохая должна быть.
Если ты думаешь, что программирование - это супер классно и интересно - то это неправда.
Если ради денег - то оно того не стоит, нервы дороже.
с зп проблем нет - около 180, хотя я знаю, что для дс это ничто лол
я хочу завести трактор, если честно, а завести его, когда ты ба - это забей, нужно MBA и прочую шляпу
думал, мб go или ds (писал тз для обеих отделов)
ладно, спасибо, не хочу флудить в адекватном треде своими биопроблемами
Программирование - тупиковый путь.
Ну попрогал кто-то лет десять.
Потом надо либо в архитекторы,где ба больше программирования.
Либо в менеджеры.
Свободные тракторы для программистов уже давно прикрылись.
Для переката нужен практически топ корпоративный уровень, позаёбистее MBA.
2+ года без опыта в смежной сфере и вышки?
Кто-то порвал очко и выгрыз оффер.
Плюс Европа разная и для полноценного переката нужно продолжать хуярить N лет не перегорая.
Да и веб макакой полтора года отработал.
2+ года опыта разработки имею ввиду
Так уже уже 300кк/секунду, ты мифическое божество из легенд для всего контингента доски.
Палка для остановки сращивания вагины из отрезанных машонки и члена.
Хорошо, когда программирование приносит удовольствие.
На других конфах котлин, так что лучше уж эта.
type httpServer struct {
config ✫ServerConfig
logger ✫logrus.Logger
router ✫mux.Router
}
func New(log ✫logrus.Logger, config ✫ServerConfig) ✫httpServer {
return &httpServer{
config: config,
logger: log,
router: mux.NewRouter(),
}
}
В main.go читаем конфиги из TOML, инициализируем логгер и затем для всех дочерних классов вроде httpServer прокидываем их в качестве параметров. Пока на бумаге выглядит хорошо, но что делать после, например, добавления базы в отдельной структуре Store? Как мне ходить в эту базу из того же httpServer? Передавать Store в качестве указателя, чтобы напрямую дергать ее методы для записи/чтения из HTTP-сервера? Или может запустить все методы дочерних классов в отдельных горутинах, чтобы обмениваться информацией через каналы? хотя через каналы методы не подергаешь, говно идея
Сам я по работе пишу на Qt, и там эта проблема решается через систему сигналов-слотов, которые можно объявить в main.cpp, и затем спокойно передавать информацию между своими инстансами через emit. moc обо всем позаботится, лишь бы QObject'ом был В Go существует подобная волшебная таблетка?
>дочерних классов
Туда ли ты зашел!
>Как мне ходить в эту базу из того же httpServer?
А как база данных и хттп-сервер связаны? В базу ходят из хэндлеров и юзеры либы сами решают как они получают подключение к бд. Ты в своем сервере предоставляешь только инфу про запрос, респонс и, возможно, контекст.
Проорал от души, /б/рат, поднял мне сегодня на весь день настроение
>>691430
Го это ЯП, Qt это фреймворк, поэтому если найдешь библиотечку, которая реализует тебе привычное поведение - welcome, ну или напиши сам.
В плане подхода к архитектуре приложения, го концептуально ничем не отличается от остальных языков, просто паттерны из конкуретного программирования встречаются чаще.
Я бы порекоммендовал тебе посмотреть в сторону инверсии зависимостей и инъекции зависимостей гугл, кстати недавно сделали DI-фреймворк wire
стремно, что сообщений об ошибках или наборов данных, на которых тест зафейлился, там никаких нет, непонятно, куда копать - локально-то все работает
А сколько в F этапов? С какого раза прошёл? Я уже 15 попыток сделал на 9 застрял.
Захожу я с браузера например на "localhost:8080/info/id123", на что роутер вызывает соответствующий хэндлер, в котором я хочу выдать инфу (попутно подергав БД) о продукте 123 через io.WriteString.
>предоставляешь только инфу про запрос, респонс и, возможно, контекст
Снова перечитал и кажись понял, у этого хэндлера же нет в аргументах ни ни одной моей структуры, только внутренние данные о запросе-ответе.
>func(w http.ResponseWriter, r ✫http.Request)
Тогда сразу возникает другой вопрос. А как тогда роутер выводит те же коды 200/400? Ему же необходимо знать о состоянии сервера, внутренней логики и т.д. То есть хэндлеру все равно для этого нужно подергать методы у других структур приложения, о которых он (согласно сигнатуре) ничего не знает.
пойду дальше проводить ликбез
>>691521
>инверсии зависимостей и инъекции зависимостей
То что нужно, спасибо!
>То есть хэндлеру все равно для этого нужно подергать методы у других структур приложения
Напрямую хттп-сервер не должен знать о каких-то базах данных и т.п., он спрятан за своим пакетом и делает свое маленькое дело. Т.е. хардкодить какой-то стор внутри структуры httpServer не вариант. Какие-то доп. структуры можно в контексте передавать, можно создать структуру с внедренными ссылками на внешние ресурсы и над ней хттп-хэндлеры пилить, можно вообще забить на первых порах и глобальный пулл соединений юзать.
Это Единственный Правильный Способ™© написания go кода, кстати
>Задачки не особо сложные, похожи на задачи из бесплатного курса на степике. Только требования к оптимизации более жесткие
Подожди, тебе уже задачи выдали? Я вчера зарегался, но пока на почте - пусто
Хуй с ним, не кооперируйтесь со мной. Скажите хоть, чтобы память оптимизировать файл по частям читали или алгоритм настраивали? А то может я не в ту сторону иду
Создаешь три уровня: сервер, контроллер, база
Сервер - это хендлеры, там обрабатываешь инпут, проводишь валидацию.
Дальше вызываешь метод контроллера. В контроллере делаешь обработку данных, вызываешь методы из базы
В базе у тебя методы только для доступа в базу и ничего большего.
Связь между уровнями строишь через интерфейсы. То есть, у тебя должен быть интерфейс базы и его реализация. Твой контроллер будет зависеть от интерфейса базы.
А вообще погугли Clean architecture, Hexagonal architecture, DDD architecture
написал на почту
Гвидо ван Россум, ты не в тот трэд зашел.
Чёткие поцаны уже сгенерили DeepCopy, пока наливали себе кофе с печенькой
Че-где не копируется? По дефолту все копируется, если ты не любитель посидеть на бутылке
Я добавил поддержку модулей через go mod init run
Теперь создаю каталог qwe и там файл asd.go
Импортируется он через "run/qwe". Тут мне уже непонятно. Он все файлы в один неймспейс помещает что-ли? А если я хочу такое же имя методу дать, но не могу, т.к. redeclared in this package, как пофиксить?
Ок, дальше. На том же уровне, что и main.go создаю файл a.go
Отлично, метод в файле доступен без импорта сразу, но только после сборки и запуска бинарника. Но при запуске go run main.go - хуй.
Что за хуйня?
С некоторых вопросов я поражаюсь. Я ненавижу форматирование дат, но пакеты то очень похожи на любой другой язык.
Одна "папка" = один пакет = один неймспейс (не считая "подпасок" подпакетов)
А откуда го догадается, из какого файла ты хочешь функцию?
Либо запускай go run *.go
Либо, как белые люди, придерживался правила, что точки входа должны лежать в ./cmd/имя программы/main.go и там может лежать исключительно этот один main.go.
>Одна "папка" = один пакет = один неймспейс (не считая "подпасок" подпакетов)
В нормальных языках "папка" - часть неймспейса.
>А откуда го догадается, из какого файла ты хочешь функцию
Почему я не могу указать путь, включая имя файла, откуда я хочу импортировать?
Ты чот не догоняешь.
Пакеты почти идентичны всяким джавам.
Не еби мозги, прочитай хотя бы одну книжку и тупые вопросы отпадут. Го на то и сделан простым, что бы не забивать голову.
Да, я охуел. Помоги решить задачу из контеста - с go не имел опыта, написал вроде рабочий вариант (локально обрабатывает 2 канала и возвращает результат обработки в 3 корректно). Но на тестах падает, может поможешь понять где ошибка. Никакого пояснения к падению нет, просто RuntimeError. Канал out пробовал и закрывать, и не трогать - результат не меняется.
Мой код прикреплен пикчей. Текст задачи:
Необходимо написать функцию func Merge2Channels(f func(int) int, in1 <-chan int, in2 <- chan int, out chan<- int, n int) в package main.
Описание ее работы:
n раз сделать следующее
прочитать по одному числу из каждого из двух каналов in1 и in2, назовем их x1 и x2.
вычислить f(x1) + f(x2)
записать полученное значение в out
Функция Merge2Channels должна быть неблокирующей, сразу возвращая управление.
Функция f может работать долгое время, ожидая чего-либо или производя вычисления.
Формат ввода
Количество итераций передается через аргумент n.
Целые числа подаются через аргументы-каналы in1 и in2.
Функция для обработки чисел перед сложением передается через аргумент f.
Формат вывода
Канал для вывода результатов передается через аргумент out.
Неправильно выразился, цитирую условия
"Отправлять задачу необходимо под компилятором make. Решения, выдающие неверный ответ, могут по техническим причинам получать вердикт Runtime Error. Медленные решения получают вердикт Idleness Limit, стоит рассматривать это как превышение времени исполнения."
То есть РантаймЕррор может говорить о неправильном ответе, а не о падении во время выполнения.
А они результаты в том же порядке ожидают что и инпут? Может второй вызов функции f был быстрее первого, например.
https://play.golang.org/p/chA1NGpA2Pr
Тут с моим примером подачи входных данных, реализовать нужно только функцию Merge2Channels
Вот практически твой вариант
https://play.golang.org/p/0XLobZL0g_8
В output верные значения, но в неверном порядке
Ну так у тебя функция случайное количество времени ждет, понятное дело что в output другой порядок будет, который зависит от времени исполнения f.
А, я понял, ты предлагаешь ответ помещать в какую-нибудь структуру с задержкой чтобы ответы по порядку были?
>>692147
Слегка модернизировал твой код, все равно не проходит тесты.
Вынес в отдельную рутину процесс отправки из 2 новых каналов в конечный.
https://play.golang.org/p/sqAOWo7hfo7
Что за контест?
https://play.golang.org/p/eeP4LRhcoiU
Все равно не проходит тест, в чем дело хз.
Попробуй каналы буферизированными сделать, размером n. Тогда у тебя следующее вычисление f(x1) не будет ожидать предыдущего вычисления f(x2).
Грубо говоря забиваешь каналы сразу как можешь, а 3-я просто ждет и суммирует.
А про функцию f(int) что-нибудь известно? Может там числодробилка, которая только от своего аргумента зависит, например (n!), где n мб достаточно большое. Тогда ее можно было бы закэшировать, как вариант.
Дело не в таймаутах - можешь их даже убрать
Керниган норм. Ты хоть содержание глянь. Эти примеры по 20 строк кода чисто часть первой главы "Учебник" или что-то такое. Блиц курс так сказать. После неё он каждую сущность разжевывает.
>>692330
Действительно, но я уже вот только что сам это понял. Ну окей, буду пытаться
Хотя 99% загнусь очень быстро, у меня очень неприятное сочетание дикого интереса к программированию и непроходимой тупизны вкупе с совершенно неподходящим гуманитарным мышлением когда ты смотришь на массивы/срезы и просто активно не понимаешь о чём тут, перечитываешь по три раза и всё равно не понимаешь. По крайней мере так с golang-book было, мб здесь получше станет
Это хуйня про гуманитарное мышление. С первого раза не поймешь. Нужно почитать, попрактиковать, поспать и это все постепенно начнет перевариваться.
ФП скорее игрушка
Уходи.
Двачу
ФП-сектанты придут и в тред асма
Для маминых саентистов это Haskell
Да, охуенно
50 тыщ строк а
50 тыщ строк б
50 тыщ строк ц
50 тыщ строк д
надо его переделать в csv из 50000 строк из 4 столбцов: а б ц д. Какой самый экономный способ сделать это?
https://unix.stackexchange.com/questions/26601/how-to-read-from-two-input-files-using-while-loop
В первом ответе решение на баше.
Я бы тоже в виме сделал. Да хоть в экселе. Но ему, возможно, надо это делать неоднократно и автоматизировать.
мимо
Входной файл:
a1
a2
a3
a4
b1
b2
b3
b4
c1
c2
c3
c4
d1
d2
d3
d4
Пиши, что надо ввести, чтобы получилось:
a1,b1,c1,d1
a2,b2,c2,d2
a3,b3,c3,d3
a4,b4,c4,d4
Выделить строки на "a", сохранить в a.txt
...
Выделить строки на "d", сохранить в d.txt
Создать новый файл
:.!paste {a,b,c,d}.txt -d ','
мимо
Вот есть приложение и библиотека.
Первое использует последнюю версию из мастера либы.
Нужно изменить либо и отладить эти изменения в приложении.
Как это сделать?
Если просто поменять код в вендоре или модулях, оно не собирается из-за проверки хэш сум(
если у тебя го модули - то делай go mod replace на локальную директорию и играйся
Да.
Эх, вот щас дочитаю книжку про го и вкачусь к вам. Хотя кого я обманываю, у меня уже давно синдром вечного студента, который всегда что-то учит(
гоферы, пользуетесь ли вы какими-то репортерами для тестов? хочу что-то типа аллюра, чтоб генерился отчет и чтоб плагин к дженкнсу был))))
мимо автоматизатор на го
что нужно, для переката в го? бтв, курс от мейла на курсере норм? тем\знаний из него достаточно для джуна?
В теории.
Го простой. Тут косяк, что к нему просят хорошее понимание многопоточности и микросервисную архитектуру.
Сап. Возникла идея наклеплепать небольшой говно сайт.Нагрузка небольшая - пишу для себя. Т.к. нагрузка небольшая, а похепе нинужно встал выбор между Пистоном и Go. Выбрал Говно за статическую типизацию. Вопрос бывалым сайтостроителям: какой фреймворк выбрать? Конечно у Goвна богатая стандартная либа, но писать всё руками с нулями нет желания. Gorila топ за свои деньги?
Может Go вообще не подходит для этой цели?
И небольшой оффтоп: можете что-ниудь посоветовать для веб мордыпосле HTML,CSS,PureJS'а, полному нулю в формошлёпстве?
Пиши на голом http. Самая популярная либа. На втором месте fasthttp. Про третье не уверен, но по звёздам на гитхабе, думаю, что gin.
На фронт, если не хочешь учить большую тройку, а надо что полегче, то svelte.
По поводу бека соглашусь с >>698501, но можешь и горилу взять, если хочешь. Но важно понимать, что это все - узко специализированные библиотеки, и в го фреймворки не принято использовать (их и нет по факту). Если хочешь именно фреймворк - бери джангу, не прогадаешь.
Насчет фронтенда хочу дополнить, что если задача небольшая и не будет особо развиватся - можно попробовать остановиться на "html/template" + Bootstrap
>На фронт, если не хочешь учить большую тройку, а надо что полегче, то svelte.
90% реакта учится за пару дней (из которых первая половина первого дня - синтаксис es6, а вторая половина второго - понимание того, как теперь это все запустить). Потом по желанию всякие хуки-хуюки и тайпскрипт, но и без них уже все хорошо пишется.
Да, а самое интересное начинаеться для дженерик-методов с несколькими возвращаемыми значениями:
func (object Object) MethodName(type T) (arg []T) (result []string, err error) {...}
Разве дженерики сломают обратную совместимость? Это будет уже головная боль всяких мейнтейнеров пакетов, переписывать все заново и тянуть легаси.
Они ж не только дженерики добавляют, вдруг стандартную либу собираются переделать.
Будет, например, как в питоне 2.
У го такой подход, что нет фреймворков, есть библиотеки-пакеты, которые решают конкретную задачу: роутинг, построение sql-запросов, маппинг данных и т.п. и фреймворк ты собираешь себе сам.
Это хорошо тогда, когда ты понимаешь, что тебе нужно и вообще есть опыт выстраивания архитектуры проекта.
А для новичков, особенно беглецов с языков с фреймворками, конечно, боль.
Взял бы ноду с экспрессом да и всё, зачем тебе статическая типизация, если ты пишешь мелкий говносайт для себя?
Если пишешь для себя, почему бы не написать на том, что нравится, а не на том, что быстро решит задачу?
но аллюр же не поддерживает го официально? я нашел неофициальную библиотеку, но там 15 звезд всего, вы ей пользуетесь?
>Они постояннно говорят, что не хотят повторять истории с питоном и большинство нововведений v2 будут и в ветке v1
Типа если добавить обратно не совместимые изменения в версию 1.5 а не 2.0 то у нас будет не как в питоне?
Нет, речь о том, чтобы обратносовместимые фичи добавлять и в 1.x ветку и после выхода 2.x, а не просто багфиксы/секюрити апдейты
И как это облегчит миграцию?
В случае с питон 2/3 там хоть было ясно зачем мигрировать - новые фичи только в ветке 3. А тут у тебя есть все новые фичи, кроме тех что обратно не совместимы и получится пикрилейтед.
Тут нужно понимать, что этот язык создавался и развивается в первую очередь для нужд гугла. Исходя из этого, как я думаю, они хотят сделать поддержку легаси максимально комфортной.
>И как это облегчит миграцию?
В том-то и суть, что - никак. Наоборот, необходимость в ней отпадет. Старые сервисы так и будут на go1
>В том-то и суть, что - никак. Наоборот, необходимость в ней отпадет. Старые сервисы так и будут на go1
Но это же судьба python2, которую не хотят повторять.
Python2 задепрекейтили и выкинули в начале этого года. F, кстати. А go1.x, на сколько я понимаю, будут суппортить вечно
ХЗ что в вашем го, в питоне была проблема, что часть ключевых вещей сначала сделали искусственно несовместимыми. То есть просто невозможно было писать код на питон-2, чтобы он заработал на питон-3, и наоборот. Из-за этого миграция была очень сложной и от попыток просто отказывались.
Самый яркий пример - юникод строки. В питон-2 надо было писать
u"строка" (с префиксом u), а в питон-3 все строки были юникод, а префикс u был запрещён. И всё, при всём желании не сделаешь совместимость из-за самой-самой базовой вещи.
Спустя 4-5 лет в питон-3 всё-таки добавили префикс, и можно строки указывать без префикса, а можно с u-префиксом для совместимости, без разницы. Но много лет было потеряно.
Что за чатик?
>Python2 задепрекейтили и выкинули в начале этого года
Только всякие гуглы с амазонами сказали что будут поддерживать все равно.
https://play.golang.org/p/ZI4zJceVenU
p.s. если кто хочет сам попробовать https://contest.yandex.ru/contest/17728
одновременно считать из двух каналов и получить результаты из f. А что там не так?
при чтении из in1 in2 совершенно излишне
var x1, x2 int
x1 = <-in1
x2 = <-in2
go func(index int) {
тут согласен, быстрее не отработает, если x2 раньше x1 получит. Но контест все-равно WA выдает. Есть ссылка на чат в телеге?
Да, у них индусы за десятки килобаксов в месяц будут это все поддерживать. Но в остальных конторах ты либо вообще не найдешь разраба, готового в 2-м питоне ковыряться в 2020 тысячелетии, либо он запросит столько денег, что тебе дешевле все это будет переписать таки на 3-й
>D. Сложение чисел
Валюсь на 5-м тесте. У кого такое было? Как это решить или какой тест написать, чтобы он аналогичным был?
>Тут нужно понимать, что этот язык создавался и развивается в первую очередь для нужд гугла. Исходя из этого, как я думаю, они хотят сделать поддержку легаси максимально комфортной.
С гуглом понятно, они пишут на своих собственных тулах и либах и им похер, А простым то сметным что делать?
Ты вот хочешь писать на Go 2, юзать дженерики и все такой, но твоя либа поддерживает только Go 1.х и ты сосешь бибу.
>>699849
>Наоборот, необходимость в ней отпадет. Старые сервисы так и будут на go1
Ну так это и есть путь Питон 2 в чистом виде. Сапортить его будут, но вечно тянуть две ветки кода - слишком сложно. Думаю лет 5 побекпортят фичи, а потом еще 5-10 багфиксы.
Все как у питончика.
Заведи переменную для "остатка" и читай посимвольно с конца, складывая
Так тесты-то на питоне, лул. Те тесты, которые на го, они штатными гошными средствами запускаются и это полное говно, а не средства
Не понял твой вопрос сходу
Вы видите копию треда, сохраненную 23 сентября 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.