GO (а также Golang, Пщ или просто Го) — современный язык с зелеными потоками на уровне синтаксиса и крутой стандартной библиотекой. Так как делать пакеджи несложно, гитхаб полон пакеджами для абсолютно всего.
Живем в ожидании Go2, пробрасываем ошибки, смеемся над джавистами, которые не могут жить без ексепшенов, дженериков и размазанной бизнес-логики, ждем, когда нам подвезут аналоги эксепшенов и дженериков
>>1661485 → переведу на язык биологии, вы жили в комфорте пилили какую то хуйню для кишков компании(которая особо и не нужны были), в итоге из-за кризисы новые вызовы, если ваш отдел сейчас не войдет в резкий поток изменений, если вы не выйдите из зоны комфорта и в стрессе не начнете хуячить что- то новое, то вы по всем законам рынка должны умереть.
>>1662110 Намного быстрее и намного меньше жрет ресурсы. Но это в ряде случаев и если пишут люди с прямыми руками. К примеру, просто отдавать данные из базы наружу скорее всего все стеки будут +- примерно одинаково (питон и руби чуть медленнее, пхп чуть быстрее, го и джава - очень быстро). А вот когда попрёт бизнес-логика и нужно будет провести 100500 побочных операций, сравнений и запросов в базу на один запрос извне - вот тогда и окажется, что го или джава на пару порядков быстрее. Но опять же, всё будет зависеть от реализации, на питоне есть pypy и прочие преобразователи в C, в php скоро будет JIT и разница будет максимум в разы. Для меня выглядит так, что обычно выбираются 2 языка, один для бизнес-логики (чтобы удобно описывать сложные правила), второй - для высоконагруженных системных сервисов (типа сервиса авторизации). Например, в баду для этого используют PHP + GO. Но ещё нужно понимать, что это крупняк. В небольших и средних конторах можно брать вообще что угодно, там не бывает таких больших нагрузок, чтобы разница становилась действительно значимой.
ты прав только от части, но основной профит не здесь закопан
таки основной профит закопан здесь:
представим ситуацию, нужно по апи отдать сложные данные, часть из которые лежит например в постгре, вторая часть в монге, и допустим у нас как всегда непрерывный рефакторинг, поэтому часть бизнесовой статистики мы руками пишем в другую бд, часть через инвент в реббит/кафку, плюс у нас есть промик, куда мы тоже пишем специфичные метрики
как это будет выглядеть в пыхе/жаве/питоне: синхронно идем в постгрю (двойной пинг до инстанса) синхронно идем в монгу (тоже двойной пинг до инстанса) мержим-преобразуем полученные данные пишем статку раз (ну я не буду снова писать про двойной пинг) пишем статку два синхронно отвечаем промиковскому экспортеру (ну допустим он нас опрашивает раз в тысячу запросов, поэтому это время поделим на 1000) отдаем клиенту ответ
как это будет выглядеть в го/ноде/питонячьем asyncio одновременно кидаем по запросу в постгрю и монгу, получаем готовые данные за время самого долгого запроса из двух мержим-преобразуем полученные данные кидаем во внутреннюю очередь/канал сообщение, что надо статку записать (там тоже асинхронно запросы кидаем) сразу же отдаем клиенту асинхронно отвечаем промиковскому экспортеру
итого, синхронная реализация с точки зрения клиента будет ~4 раза медленнее
и давайте будем честны, тредами на жаве такое не делают, потому что скорее память кончится, а что с ивентлупами в жаве я не знаю, и что asyncio, что reactphp - маргинальные технологии
>>1662084 Так и есть. Кишки может и нужны, но на разработку уходят деньги. И вроде бы эти кишки уже что-то умеют, а что не умеют можно например заменить написанием excel-ек. А тут кризис и необходимость сокращать расходы, и зарплаты надо платить тем людям кто действительно зарабатывает деньги компании (инженеры, монтажники, проектировщики, etc).
Вообще конечно, будь я боссам я бы не ввязывался в такую авантюру как собственная CRM не будучи готовым тратить большие средства уж хотя бы на одного-двух качественных специалистов.
Ко всему этому я был готов, в принципе, просто я хотел играть "безопасно" прыгая с одного места работы на другое, и чтобы умные парни тратили на меня своё время отвечая на глупые вопросы там, где я не справляюсь самостоятельно. А быть тим лидом, принимать ответственные решения, определять архитектуру приложения... У меня для этого тупо не хватает знаний и опыта, а зарабатывать седые волосы будучи джуном мне нахуй не надо. Я всю жизнь топил не за большой заработок, а за комфорт.
Другое дело, конечно, что сейчас может и выбора не оказаться.
>>1662181 Ну asyncio уже давно мейнстрим. Wargaming, Ростелеком, Yandex, Avito, Сбер используют aiohttp, который в свою очередь основан на asyncio. Но проблема питона в том, что большинство библиотек заточены под синхронный питон, под asyncio не так уж и много хороших инструментов (а это одно из немногих преимуществ питона), поэтому зачем мучаться с питоном, если можно взять golang, который изначально разрабатывался под асинхронность
>>1662276 > asyncio не так уж и много хороших инструментов Благодаря популярности пистона, думаю со временем сообщество наверстает отставание. Джанга 3 вон уже прикручивает асинхронность чуть-по-чуть.
не здохнет и не нужна там асинхронность, перфомансом джанга никогда тащить не будет, под nosql ее орм тоже никак не подходит, а вот как "работающая из коробки" внутренняя гуйня для сервиса - самый ок, как mvp тоже неплоха, но сервисы ее очень просто и быстро перерастаюст и в этом нет ничего плохого
>>1662278 ты в курсе, что asyncio уже лет пять наверно, мб больше не гуглил, сделайте это за меня; в пыхе например есть swoole, выглядит тоже как топчик, но что-то как-то нет
Парни, привет. Начал курить го по совету товарища, который этим зарабатывает, но моя ленивая башка очень тяжело и прям со скрипом воспринимает новое. И так во всем почти. Прикол в том, что я работаю ночным сотрудником техпода и времени учиться - вагон. Сори, что офтоп, но может, у кого была похожая хуйня? Как заинтересовать себя что ли? Когда не на работе, пью пиво и смотрю видяшки в основном, как-то чмошно получается.
Попал под сокращение на своей работе К сожалению, с языком лично не знаком, но писал коллегам пару тз для десктопа - делали на Го и отзывы очень годные
Сам я долбаеб, который не умеет читать книжки и привычнее, когда есть ментор/наставник или еще кто. Короче, есть ли годные курсы по пщ? Гикбрейнс, скилбокс, нетология - вроде как полная параша.
>>1662944 Ultimate go на английском - покрывает язык практически полностью, рассматриваются некоторые низкоуровневые штуки, есть небольшой уклон в software engineering.
Разработчик Go от Otus - спорный курс, есть слабые лекторы. из плюсов: - рассматривается устройство go - больше прикладных знаний --есть задания
Оба курса можно получить забесплатно (ну или почти) если хорошенько поискать
Здравствуйте. Очередной вкатывальщик ИТТ Стараюсь изучить на курсере, пока все нравится, но...Можно ли набраться опыта/экспертизы, не меняя работу? Звучит максимально странно, но сейчас получаю довольно хорошую зп, и не вкатываться джуном.
Более реалистично звучит go + front, только пиздецки не хочется осваивать js. Аналогично понятно, что можно набраться опыта в мобилках.
Расскажите про контекст. Допустим, я делаю рест апи, каждый реквест содержит контекст, который я прокидываю из обработчика запроса по всей иерархии вызовов, где это возможно. Допустим, вся логика сводится к вызову функции, состоящей из последовательных затратных по времени операций, в ней контекст никуда не прикрутишь. В таком случае его просто принимать, но игнорировать? Или можно ту функцию переписать, чтобы она возвращала результат через канал, написать к ней обертку, которая запустит основную функцию в горутине, а потом будет делать селект между каналом результата функции и каналом Done контекста. Тогда можно будет в случае чего быстро вернуться, но горутина с основной логике будет выполняться в никуда. Или можно этим сраным селектом обернуть каждое выражение в функции и чекать из контекста отмену на каждом шаге алгоритма, но это будет ад. Как принято делать?
>Или можно этим сраным селектом обернуть каждое выражение в функции и чекать из контекста отмену на каждом шаге алгоритма, но это будет ад. select + ctx.Done нужно использовать в местах, где есть ожидание от других каналов, в остальных же местах достаточно использовать проверку ctx.Err() != nil >контекста отмену на каждом шаге алгоритма Если идет обработка какого-то говна в цикле - достаточно одной проверки в начале тела цикла, иначе - перед тяжелыми вызовами, т.е. в большинстве случаев достаточно перед IO операциями
Какие плюсы/минусы при перекате с плюсов? Плюсы заебали тем, что их можно учить бесконечно просто, каждый год узнаю что-то новое, что можно было сделать лучше.
>>1662181 Ну так я об этом и говорил. У тебя будет сервис, который умеет синхронно ходить в кучу сервисов, мерджит-преобразует и всё такое, на го. Понадобились данные - один раз сходил в соседний под в этот сервис и получил их, а потом отдал. Пыха здесь чисто как прослойка нужна, чтобы бизнес-логику писать с использованием этих данных.
Вопрос привычки. После питона меня коробит от всего. Больно у него много классных возможностей по переопределение синтаксиса, множественного наследования, метакласмов. После этого на чем-то урезанном, вроде джава или го, писать больно.
Но со временем втянулся. Ничего страшного, не так красиво и лаконично, но можно сделать что угодно.
>>1665402 в том, что ты осознанно отпустишь какую-то блокирующую часть кода и пойдешь дальше, например у тебя какая-то долгая операция и ты хочешь грейсфул завершить прилож за предсказуемое время, при этом на результат этой операции тебе впринципе пофиг
и, это конечно костыль, но реальная жизнь такова
>>1665291 акцент на асинхронную работу с ио, которого у тебя не было, а это дает наибольший вклад в итоговый перформанс
Гоферы, а расскажите, как вы обрабатываете ошибки?
И я здесь имею ввиду не только if err != nil { return err }, но и что дальше делать с этой err, что делать, если тебе никак нельзя тут получить err и тд?
>>1666774 Если ошибка появилась там, где не должно быть ошибки, то одно из двух: 1. система плохо спроектирована 2. сдохло железо Оба случая - без вариантов паника, тут уже не до ошибок.
кто как работает с миграциями? какой пакет для этого используете? стоит ли запускать миграции из приложения при его запуске или лучше отдельно запускать команду?
>>1666790 > кто как работает с миграциями? какой пакет для этого используете?
почитай прошлый тред, там вроде goose рекоммендовали поддерживаю
> стоит ли запускать миграции из приложения при его запуске или лучше отдельно запускать команду?
во-первых, однозначно не нужно встраивать в запуск приложения инструмент миграции, во-вторых, запускать ли приложение через `sh -c "migrate-cmd && app-start-cmd"` сильно зависит от.
>>1669556 >балансировщик нагрузки Ну да, но в случае одной ноды - есть ли польза? Go код и так умеет утилизироваь все ядра. Я нашел только одну причину для этого - нужникс, наверное, будет проще в эксплуатации, его можно более гибко тюнить чем мой бинарь >ставь апач А это еще зачем? Я думал он нужен только для того, чтобы php/python/perl скрипты запускать, а нужникс - более производительный
Писал в прошлом треде, что после 3 месячного курса внутреннего компании, меня взяли джуном, работаю уже почти месяц, перевожу микросервисы с монги на постгресс, и иногда кажется что я пиздец тупой, могу долго сидеть тупить как работает логика сервиса, и приходят в голову мысли что может ну его нахуй, может это не мое, сижу дрочу код\тесты часов по 10 в день. Это норма?
Перекатываюсь в го из пыхи. Курсы от ОТУСа норм? И как определить, что я уже могу считаться джуном го? Какую приложуху надо написать как пет? в пыхе это круд со студентами
>>1669680 у отуса вебинары, со всеми вытекающими. чмекающие, пукающие лекторы с уёбищными микрофонами, чсвшные уёбки вместо студентов, дерейлящие занятия нерелейтед вопросами, половина лекторов нихуя не флюент в пыще и тому подобное. сама программа норм конеш
>>1669699 У отуса странная тян, которой задают вопросы, она говорит "окей, отвечу в конце занятия", в конце занятия говорит "окей, давайте посмотрим в исходники го", ничего там не находит и прощается.
>>1669689 >оу, интересно, распишешь кейсы? Я знаю только два: 1) Тебе нужен high availability, у SQL баз с этим довольно плохо 2) Когда ты уперся в скорость записи в SQL базу Для большинства проектов эти вещи вообще не актуальны
Объясните, зачем гугл вкладывает кучу бабла в раскрутку Go? Если бы только для своих внутренних корпоративных сервисов использовал - понятно, но зачем широкая-то раскрутка? В чём профит?
>>1670022 Так к гуглу и без этого очереди желающих выстраиваются. К тому же Go после сиобразных языков выучивается быстро. Поэтому не вижу смысла тратить кучу бабла на широкую раскрутку языка из-за этого. Должны быть какие-то более весомые причины.
>>1669665 У кей-велью баз есть свои задачи конечно, просто в какой-то момент монга была под лютым хайпом и все вебдебилы бросились заменять нормальные реляционки на доступные своим имбецильным мозгам хеш-таблицы там где надо и не надо. В ответ на это пошла волна хейта, вот осадок до сих пор остался. Вообще данные лучше держать в хорошо структурированном и нормализованном виде, пока это возможно и не создаёт проблем в поддержке. Такой подход сам по себе позволяет избежать множества ошибок связанных с данными и применить определенные оптимизации. Потом, если где-то упираешься, можно частично денормализовать критичные участки или вообще вынести их куда-то. Использование же безсхемной базы по дефолту подразумевает слабое структурирование, даже тех данных, что можно было бы структурировать гораздо строже. Это даёт возможность бездумно хуярить хуяк-хуяк в продакшн на старте, чем вебдибилы обычно активно пользуются, а потом насасываются на поддержке этого ебаного хаоса. Нет смысла быстро-быстро писать данные как попало, если потом их надо обрабатывать, а ты ничего не можешь про них сказать, кроме того что это json с полем id. С таким же успехом можно и в /dev/null писать, это еще быстрее.
>>1670072 Почему это именно в гугл? Подсадить всех на свой язычок, чтобы, когда наберётся критическая масса кодеров на нём, продавливать своё видение того, как должно развиваться IT. Это как с хромом.
>>1670099 Хром монетизируется за счёт зондов и рекламы. К тому же в интересах тотальной слежки за своими гражданами и всем миром американское правительство готово выделить гуглу любые деньги. То есть даже без рекламы хромой выживет. Но Go для подобного плохо подходит, ибо примитивный. Для этого лучше подходит переусложнённый жирнючий язычок, чтобы во всех его потрохах никто не вздумал серьёзно копаться.
>>1670269 Гугл как таковой держится в основном за счёт рекламы. И работает он в первую очередь на себя, а не на американское правительство.
> Но Go для подобного плохо подходит, ибо примитивный. Наоборот, язык должен быть максимально простой, чтобы как можно больше вкатывальщиков ринулось его изучать. Дело даже не в потенциальном наличии зондов в компиляторе пщ, а в самом факте, что на этом языке будут писать именно так, как хочет гугл.
>>1665735 > акцент на асинхронную работу с ио, которого у тебя не было, а это дает наибольший вклад в итоговый перформанс
Не особенно корректно, nginx с достаточным размером пула обрабатывает конские потоки трафика, а асинхронная работа с ио нужна очень даже не всегда. Как правило это выглядит, как: пришёл запрос, ты последовательно сходил в несколько сервисов, отдал ответ. Тут нечего распараллеливать, а последовательные вызовы чего угодно без сложных расчётов и загрузки процессора пыха будет делать достаточно быстро. Зато писать на ней всякие стратегии (то есть бизнес логику) ты будешь быстрее, чем на го.
>>1670076 Пф, естественно актуально. Очень часто данные можно обработать потом, а вот сохранить их для обработки ты должен сразу. Возьми, к примеру, чат - твоё сообщение может долететь к собеседникам не мгновенно, а через несколько секунд, но сохранить его ты должен моментально, чтобы потом прососать по всем системам доставки данных, кэшам, etc. Отсюда ты получаешь огромный поток данных на запись (куча людей что-то пишет).
Но вообще какой-нибудь постгрес способен писать данные очень быстро, при отсутствии внешних ключей, уникальных ключей и прочей необходимости общаться с нодами.
Плюс же монги - это возможность удобно поднимать её в кластерном режиме, поднять так же просто какую-нибудь галеру или местер-мастер постгреса ты не сможешь.
>>1670814 Я понимаю, но про видеокурсы я ничего сказать не могу, а вот блог видел. Могу попытаться сделать вывод, что если их блог - полная херня, то и вероятно видеокурсы у них тоже не очень.
>>1670076 Актуально, но немного на больших объемах трафика. Чтение ты можешь сейлить практически до бесконечности даже с классическими SQL базами при помощи каскадной репликации. А с записью - все сложнее, ее практически невозможно масштабировать горизонтально, все что мы можем - это по немногу отказываться от триггеров, foreign key'ев или даже индексов
>>1675512 Временами заебывает, особенно если нормально обрабатывать (т.е. добавлять контекст к ошибке на каждом этапе) Но ничего лучше не придумали, на самом деле, ведь try/catch очень неудобный в условиях кучи горутин, у которых еще очень разная иерархия/время жизни/важность может быть
>>1675747 В каком месте это лучше? Логика вперемешку с обработкой ошибок, из-за которой код потом становится нечитаемым, и приходится городить хуиту типа func check(value interface{}, err error) interface{} { if (err != nil) { log.Fatal(err) } return value }
a := check(foo()).(int) b := check(bar()).(string)
>>1675823 Кто тебе виноват, что ты городишь хуиту. Взял зачем-то спрятал ошибку, теперь тот, кто будет читать твой код, должен будет держать эту функцию check в голове. А если еррор не фатальный? Вводить еще одну чекалку? Каша какая-то получится.
Насущный вопрос: есть метод, запрашивающий данные из бд и возвращающий объект + ошибку (ошибка возвращается в т.ч в случае, если запрос не вернул данных). Указатель на объект возвращать нет необходимости, т.к сам объект не очень большой и изменениям в дальнейшем не подвергнется.
Дело в том, что если запрос не нашел данные и err != nil, в случае возврата значения мне необходимо вернуть структуру с нулевыми значениями у полей + ошибку. В случае же с возвратом указателя я могу вернуть nil + ошибку, что является своего рода подстраховкой на случай, если кто-то не будет проверять наличие ошибки, вызывая мой метод.
Вопрос: как лучше поступить в этой ситуации и стоит ли использовать указатель исключительно ради возможности возврата nil?
Живётся так же, как жилось в джаве до добавления дженериков. В джаве был Object, а тут есть interface{}. Кастить приходится руками, и типобезопасность идёт нахуй.
>>1676006 >Вопрос: как лучше поступить в этой ситуации и стоит ли использовать указатель исключительно ради возможности возврата nil? Как верно уже сказали - не стоит, конвенционально считаеться, что если ты вернул не нулевую ошибку - значит ты вернешь нулевые остальные результаты, если не укажешь обратное в документации (как с io.Writer)
>>1676652 Столько предположений/допущений для относительно молодого статически типизированного языка - это кекус, конечно. Result нинужен, будем четыре состояния нахуй таскать.
>стоит ли запускать миграции из приложения при его запуске или лучше отдельно запускать команду?
На нормальной галере прав на изменение схемы данных в продовой дб тебе никто не даст, поэтому миграции обычно накатываются при деплое в сиай сиди, но блять никак не при запуске.
Подходит ли этот язык для низкоуровневых вещей? Написание читов и вирусов. Понимаю, что звучит глупо, но все-таки хотелось бы услышать, что-то адекватное
>>1677106 Ну, интерфесы везде так работают - 3 строки сигнатуры и 30 строк комментария как правильно его имплементировать. Тут хотя бы компилятор типы проверяет, а в питоне каком-нибуть - вообще все взаимодействие с фреймворками на договоренностях держится
>>1677273 >Подходит ли этот язык для низкоуровневых вещей? Да, относительно удобно с сисколами работать. Или можно заинкулдить c/c++ либу через CGO, но там свои нюансы >Написание читов Не эксперт по этой теме, но я думаю что какой-нибуть ArtMoney можно вообще на чем угодно написать. Любой адекватный язык имеет необходимые возможности и/или может подключить код на си, который это умеет. >вирусов Про это я еще меньше знаю, но думаю го может быть удобный в том, что у тебя на выходе может быть бинарь без каких-либо системных зависимостей, но с другой стороны - ты получаешь на выходе довольно жирный бинарь - порядка 2-х мегабайт на хелоуворлд.
>>1677273 Чтобы использовать какую-то уязвимость, писать придется на языках, свойственных целевой платформе: файрфокс - жопаскрипт, реляционная бдшка - эскьюэл. Уязвимость вообще может проявляться как реакция на определенные данные, тогда тут вообще никакой язык.
>>1677393 Ясное дело, что для того чтобы сделать условную [no]SQL-инекцию - тебе нужно писать [no]SQL запрос. Тут же вопрос в другом - можно ли использовать го чтобы отправлять эти запросы в квери-параметрах к какому-нибуть серверу. Я думаю можно, но вирус я бы писал на расте, наверное
>>1677825 > можно ли использовать го чтобы отправлять эти запросы в квери-параметрах к какому-нибуть серверу Для этого не то что го - баша с курлом хватит.
Поясните, нужно сделать такого рода вещь: нужно отсортировать данные таблицы по регексу. Подвох в том, что регекс вводится в поле, а значит просто eval нельзя.
>>1677825 Да вроде ботов нормально на нем делать. У меня есть пара-тройка, прикидывал, как их примерно на нем переписать, можно. Но по идее вирусы могут работать на дырках в либах со стандартным соглашением о вызовах и традиционным подходом к памяти. В go это все отличается. А либ таких дохера, они везде. А вообще вся эта вредоносная хуета это очень это очень разные вещи могут быть. Длч чего-то подойдет, условно там сервис для винды я бы не стал на нем писать.
Суп гач. Я заебался и у меня люто горит пердак. Памахи! У меня несколько вопросов:
Где должны лежать исходники программы на го? в $gopath/src? Или похуй где? Если моя программа размазана по нескольким файлам как мне делать импорты, если моя программа будет неходиться ВНЕ gopath?
Ебать, это такие банальные вопросы, но у меня уже столько времени рвет от них жопу! Я просто хочу узнать, как правильно сделать, и что б пацаны не засмеяли. Я нахуй всё, устал.
>>1677924 https://play.golang.org/p/2rK6cRbsq82, если я правильно понял тебя >>1677933 Какую версию юзаешь? >>1677935 > что такое эти ваши гомодулес Это то, что тебе сейчас как раз нужно >какого хуя gopls до сих пор их не поддерживает? Поддерживает, при том давно. Ты go mod init делал?
>>1677946 > Поддерживает, при том давно. Ты go mod init делал? Так это надо в каждой папке внутри моего проекта "hello-wrot" делать? GoLand просто не требует никаких дополнительных файлов. > Какую версию юзаешь? 1.14 > Это то, что тебе сейчас как раз нужно Ну и самый главный вопрос. Как мне тогда в пакете main получить доступ к функциям из вложенный "подпакетов"? Мне напрямую что ли импортировать надо import "/home/$user/hello-wrot/nestedppackage" и только потом nestedpackage.Func?
У меня просто горит от того, что о том как нужно делать нигде не сказано. Тут говорят надо ложить исходники в $GOPATH, там говорят пох юзайте гомодули, гомомодули не поддерживаются гугловским инструментарием, (один из разрабов писал что типа WIP эта фича в репах к VSCode'у).
>>1677959 >Так это надо в каждой папке внутри моего проекта "hello-wrot" делать? Только в корне >Ну и самый главный вопрос. Как мне тогда в пакете main получить доступ к функциям из вложенный "подпакетов"? Путь к папке относительно go.mod файла >Тут говорят надо ложить исходники в $GOPATH Уже не нужно >один из разрабов писал что типа WIP эта фича в репах к VSCode'у Велком ту опенсорс
Алсо, уже некоторое время читаю книжку по go, прошел туториал, написал какие-то там эхо, хелловорлды, вот это всё, но по какой-то чудесной причине я так ни разу еще и не наткнулся на тему "управление версиями". Как будто её намеренно обходят стороной. А тут читаю статью на хабре про гомомодули, а там повествование ведется в таком тоне, будто раньше как бы и не было вообще никакой системы управления версий.
Неужели так раньше это всё и работало? >>1678023 Спасибо, сейчас и это почитаю.
>>1678127 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.
>>1678146 Для корня проекта формально нужен репозиторий. Можешь написать какой-нибудь домен перед именем модуля, должно прокатить. Но проще сделать приватную репу на гитхабе, они сейчас все равно безлимитные.
>>1678149 Я даже хз как на это реагировать, если честно. Ну, типа язык, сам компилятор принуждает меня заводить реп хотя я еще даже ничего не начал писать. Большое спасибо за ответы, конечно, но типа как вообще сообщество с этим справляется? Это норм практика и я один такой неандерталец с этого бомблю? Или это тырпрайс сектор такой сурьёзный?
>>1678027 >А тут читаю статью на хабре про гомомодули, а там повествование ведется в таком тоне, будто раньше как бы и не было вообще никакой системы управления версий. Да, все так. Модули появились относительно недавно, стабильную версию модулей вообще только в 1.14 (текущая версия) ввели. До этого все держалось на соглашении о том, что если меняеться сигнатура/поведение - нужно менять import path, но это не работало и сначала появился вендоринг, а затем - модули. >>1678053 Там довольно много всего - не как в питоне, конечно, но основное есть. Если бы я делал язык - я много чего туда бы не ложил из того что там есть.
>>1678150 > хз как на это реагировать, если честно Это ощущение не исчезнет, в пщ всё сделано вот так вот. Здесь на все вещи Единственный Правильный Взгляд, с которым ты обязан согласиться, чтобы на этом язычке хоть что-то писать.
>>1678150 Тебя же никто не заставляет создавать гитхаб репо и пушить туда код. Тебе достаточно просто написать туда гитхаб-лайк URL, относись к этому как указанию уникального названия репозитория
>>1678447 А ещё можно слепить дженерики из interface{}, эксепшены из хуй пойми чего, рекурсивные импорты из огромных пакетов и dependency injection из глобальных переменных. Просто произведение искусства какое-то, а не язык.
>>1678504 >А ещё можно слепить дженерики из interface{} нельзя >эксепшены из хуй пойми чего нельзя >рекурсивные импорты из огромных пакетов не знаю >dependency injection из глобальных переменных Зачем?
>>1678815 Оно же в любом случае на сервере: 1. Если с куками, то в куке лежит айдишник сессии на сервере. Сервер нашел сессию - пользователь авторизован. 2. Если с токенами, то токен клиент передает в хедере. Токен есть и правильно расшифровывается - пользователь авторизован.
>>1678827 В первом случае сервер хранит состояние, а во втором - вся нужная информация храниться на клиенте, и для получения информации о правах доступа или чем-то подобном не нужно ходить лишний раз ходить на диск за этим
>>1678318 Если так принято, то думаю я смогу смириться, хоть и больно. Человек ко всему привыкает. >>1678457 Следует не с того места начать учить язык и порой нужно много боли пройти, чтобы какие-то прописные истины понять/выучить. Но судя по оф. доке они и сами не рады стремаются своего решения. Ах, если бы я начал читать эту статью два месяца назад, а не туториал/книгу/пердолинг с тулзами.
>>1679027 Stateless подразумевает отсутствие состояния на уровне протокола (например, у FTP и SSH состояние есть), с внутренним состоянием сервера это никак не связано.
причем тут внутреннее состояние сервера, если я говорю про хранение состояния клиента на сервере? stateless подразумевает отсутствие инфы о состоянии клиента
тащем-то языку уже 10 лет и проектируют его далеко не самые глупые люди, поэтому " Единственный Правильный Взгляд" в какой-то мере присутсвует, но пока у тебя нет достаточного опыта и понимания того, что тебе действительно нужно хотя бы в какой-то временной перспективе, я бы с ним не спорил и принимал за best-practice и копил бы опыт
>>1679106 ~2MB для современной SPA это много, но не критично. Вопрос только в том, какой профит в сравнении с js/ts ты получаешь и стоит ли оно того (я думаю - нет)
Заканчиваю голанг тур и немного в недоумении Что еще почитать? И есть ли вообще то, о чем читать? Или это и есть весь язык, и я выучил го за пару вечеров?
>>1679166 >как это будет работать? Техзадание написать? Ну вот просто мысль и все. А как это не будет работать в таком случае?
>>1679179 У тебя в голове атоматически происходит исследование, как все, что ты уже знаешь и делал, соотносится с новоизучаемым языком. Надо попробовать что-то свое уже имеющееся переписать на этом языке. А так вообще да, апология Go в том числе в его простоте.
>>1677090 Нет. Дело в тех, кто код ревью не проводит или проводит сквозь пальцы. Триллиарды долларов приносит не чистый код, а идея. Всем насрать на идеальный код, лишь бы это приносило много денег, имеем то, что имеем. Страдания 300к программистов никого не волнует
Проблемы начинаются, когда у тебя в апишке становится больше трех-четырех доменов, тебе надо это деплоить в разные поды на кубере, рефакторить всю лапшу в солид и чистую архитектуру, вот за это уже деньги платят, а не за то что ты умеешь реквест разбирать и в базу ходить.
>>1662157 >А вот когда попрёт бизнес-логика и нужно будет провести 100500 побочных операций, сравнений и запросов в базу на один запрос извне - вот тогда и окажется, что го или джава на пару порядков быстрее. Ты че там куришь? Node.js в однопоточном режиме давно уже быстрее джавы.
В продолжении питона. Есть какая-нибудь хуйня, чтоб для питонистов/перловиков/Сишников было? Либо просто быстрый экскурс, без этой хуйни, что "у нас пишется x int, а в сиподобных языках int x" или "float32 и float64 - не одно и тоже".
>>1680063 Книга Кернигана По-быстрому - tour of go
Что означает "для питонистов"? Типа питонисты или перловики такие ущербные, что им надо по-особому объяснять? Всегда было, что хочешь выучить язык - читаешь учебник и пишешь код. Врядли тебе надо выучить го прям на завтра, пару-тройку недель для ознакомления можно потратить.
>>1680063 Тупо просматриваешь по абзацу за секунду и читаешь внимательно, если заметил что-то незнакомое. В отличие от вкатывальщиков, которым надо мало того что читать внимательно всегда, так ещё и сидеть и обдумывать прочитанное.
>>1679453 > Ты че там куришь? Node.js в однопоточном режиме давно уже быстрее джавы. Надо смотреть бенчмарки, полюбому как обычно на джаве наговнокодили или настроили вм неправильно. Это невозможно хотя бы из-за особенностей jit'а на джаве и в ноде.
>>1680110 >>1680119 Синтетические бенчи вообще нихуя не значат. Остается только субъективно-эмперически выводить. И мой опыт говорит, что беку скорость исполнения как таковая вообще не критична. Будь все это важно не доминировали бы всякие питоны и пыхи на беке. мимо-шел
>>1680164 Есть разные задачи и разные требования к производительности - например, кому-то нормально использовать по воркеру на соединение, а у кого-то есть задача держать 10к соединений на машину. При этом в этом случае ты упираешься не в скорость обработки (все равно бекенд значительную часть времени тупо ждет ответа от базы или другого сервиса), а в количество памяти, которое тебе нужно на обработку одного запроса
>>1680662 Где такое написано? >https://tour.golang.org/welcome/3 >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)/
посоветуйте, что бы почитать для понимания работы с http в го? перебираюсь из пыхи, где делаешь запрос и затем подключение отваливается вместе с отработавшим процессом и для меня в новизну штуки вроде переиспользования подключений, с которыми в го принято работать более явно
А у всех gopls норм работает? Хочется на карантине экстрима, съезжаю с голанда на вим + ale, и впринципе gopls работает норм, но в какой-то момент просто перестает работать, те ни синтаксис, ни навигация по коду, ничего не работает, а сам процесс висит и в логах пусто, решается рестартом, но снова до какого-то момента.
Есть tcp сервер на го, с клиента ему отправляются строчки всякие, после чего клиент офается, а с ним и сервер с ошибкой: wsarecv: An existing connection was forcibly closed by the remote host exit status 1
Как сделать так, чтобы сервер не падал при дисконекте клиента и как правильно в таком случае дисконектиться клиенту?
Гач подскажи, а го для консольных утилит хороший язык? Вот мне сейчас нужно кое что написать чтобы тестовыми данными заполнить БД, и я думаю писать это на го или питоне.
Не, не так:
У меня прям какие-то предрассудки, что компилируемые языки не должны использоваться для мелких несерьезных задач. Отговори меня, двачик!
>>1683444 Спасибо гач. Пока тебе писал уже для себя решил, что в моей конкретной задаче лучше будет использовать go. Но если ты как-то это это прокомментируешь буду рад.
>>1683444 >>1683445 Если нужно набросать какой-нибудь одноразовый скрипт, а долго сидеть и вникать не охота, бери то, что лучше знаешь и на чём писать будет удобнее. Простые скрипты, как правило, пишутся быстрее, но вот допустим знаешь ты Go в совершенстве, а питона не знаешь вообще, тогда быстрее напишешь на Go, чем выучишь питон. И наоборот.
>>1683586 Какой-то ебанутый баг. В тред захожу, он ведет на 404 со страницей архива. Через другой браузер заходит. Вопрос выше написал через страницу со списком всех тредов.
>>1683588 Причём бывает, что и открытие в приватной вкладке не помогает, только другой браузер. Как будто на сервере прямо в коде указано, что при каких-то условиях нужно перенаправлять на архив именно для такого IP и именно для такого-то браузера.
Почему такая ебанутая работа с интерфейсами? На уровне объявления переменной даем знать, что нужно использовать интерфейс. У нас две структуры могут или не могут поддерживать методы интерфейса, в зависимости от того, как укажем. Нахуй так делать?
>>1684464 Собственно, почитал о модулях. Вроде аж три варианта работы. И что теперь не нужно проект держать на диске ака github.org/huila/proekt Только сама работа не совсем понятна. Ожидал как в питоне чтоб было, requirements содержит имя и номер версии. А вычитал какую-то мудоту. Меняешь мажорную версию - меняешь имя импорта. Да и вообще без тегов - никуда. И помещать теперь строго вне GOPATH. Пиздец какой-то.
>>1684498 > содержит имя и номер версии В go.mod так же. Почитай про модули в Go.
> Меняешь мажорную версию - меняешь имя импорта. До появления модулей действительно так и было. Тогда и вендоринг был. Сейчас на нужно.
> без тегов - никуда. Да, версионирование в Go привязано к тегам Git.
> И помещать теперь строго вне GOPATH. Воспринимай это как питоний site-packages, то есть как некий общесистемный локальный репозиторий, о котором знать ничего не надо, а система управления зависимостями сам всё притащит. Хотя это больше на жабий Maven похоже.
Анончик, помоги советом. Последние полтора года работаю C++ в основном формошлепство с примесью алгоритмов на Qt и QML, получаю 80к на руки прогером, при этом в команде много бэкендеров, которые пишут микросервисы на голанге. По работе иногда приходилось смотреть их код, и в принципе ничего сверхъестественного и сложного не увидел. Конечно если копнуть глубже, то разумеется найду кучу подводных камней, хотя их должно быть на порядок меньше, чем в плюсах. Так вот, переходя к делу. Планирую менять работу, и стою сейчас на распутье. Пока я молодой недомиддл с синдромом самозванца, и могу менять рабочий стек без особой потери в зарплате. И чем дальше я смотрю в сторону плюсов, тем меньше мне хочется истязать себя move-семантикой, template наркоманией, компайл-тайм вычислениями, UB, boost'ом и т.д. Хочется уйти в тихую гавань с достойной зарплатой и спокойно пилить микросервисы, ходить в базу и запихивать это все в докер. Так вот, сам вопрос: стоит ли мне припиздеть в резюме о своем опыте бэка на Go, чтобы попытаться вкатиться к вам? И что нужно знать для успешной коммерческой разработки? Пока вижу такой стек для миддла: Postgre, gRPC, protobuf, линуксы с докерами; задрочить, чтобы от зубов отскакивало: SQL, HTTP, REST, горутины, каналы, базовые Go-пакеты, ну и умение вертеть деревья маркером на доске. Что-нибудь еще не забыл?
>>1685454 >Что-нибудь еще не забыл? >SQL, HTTP, REST Имплементация всего этого на Go, то есть драйвера, роутеры и тд Еще дополнительно: тесты в go, go mod, golang project struct, dependency injection.
Для начала ты напиши хотя бы один небольшой проект на Go, чтобы понимать, как там все устроено
>>1685454 >стоит ли мне припиздеть в резюме о своем опыте бэка на Go Ясен пень стоит. Никто не проверит. Я сам также писал на с++, потом перекотился в питюн. Для этого по вечерам его изучал. >REST Фи, это шо? GraphQL рулет.
Гоч можно платину? Какие задачи для го вообще являются основными? Начал учить, потому что хочу в тырпрайс, но не хочу жабу (возможно зря), и быть немного ближе к железу после питона. Я правильно сделал выбор?
>>1685854 >быть немного ближе к железу неверно. Хоть Го и похож на Си, но для задач с железом применяется редко >Какие задачи для го вообще являются основными? Бэкенд для всяких вебсервисов
>>1687253 есть либы для парсинга, но приходится создавать +100500 классов, если в ответе есть вложенности(даже учитывая, что есть конвертеры json2pojo, все равно мегауныло)
>>1685896 Бусинес? >>1686884 Да вот если честно продумываю. Жаба все таки уже очень долго живёт, сейчас ей вторую жизнь дали в лице котлина. Много бородатых книг для неё написано. А я сейчас репу чешу и думаю почему я вдруг решил го учить.
Что-то мне кажется жабистом легче на галере затеряться и вообще работу найти чём го разработчиком.
Видимо после окончания моего текущего проекта на го надо будет попробовать сделать что-то и на котлине.
>>1687296 Да говорят же что это те же яйца только в профиль. Ну в общем я всерьёз хотел с питона на го укатиться, но теперь задумался. Обычно такие думы затягиваются надолго.
>>1689435 Хочу в тырпрайс затеряться на большой галере. С такими целями наверняка надо было учить жабу.
Но пока что по ощущениям пщ это воплощение моих текущих желаний: - стандартный автоформат кода. Никаких срачей; - минимализм, максимальная простота: я не хочу лишний раз думать каким способом реализовать мою задачу. хочу чтобы способ был один. - тырпрайс - статическая типизация? (ещё не распробовал)
Вообще хочу поделиться. Я писал только не питоне и жс, и вот уже какое-то время начал писать на го, а более менее активно -- последнюю неделю.
Это прекрасное чувство, можно практически фейсроллить по клавиатуре, IDE сама подскажет где ошибки, после точки почти всегда знает Что следует даже с самой ебучей вложенностью. В питоне мне нужно тупо лезть в дебаггер, чтобы узнать че там в ебучую функцию приходит, а тут все известно. Ещё мне очень нравится дока. Классно зделоли! Код запускается и работает без ошибок в разы чаще, чем на питоне.
Пишу сейчас бота для телеги, и мне нужно было быстро написать скрипт для того же бота.
Так вот если в го мне нужно провести 2 круга перезапуска кода, чтобы он работал, то в питоне 5-7. И ошибки зачастую связаны с типами, а не логикой.
Я не говорю, что питон плохой. Питон прекрасен и я его очень люблю. В сравнении теперь ощущается, почему его так назвали ИЗ-ЗА ГИБКОСТИ, ПОНЯЛИ))) ПИТОН!! , но писать со строгой типизацией это совсем другие ощущения.
Мне показалось, что написание кода на го отнимает меньше энергии чем написание не питоне. Хотя конечно я только начал.
Там ещё кстати ozon набирает народ на бесплатное обучение с вероятностью последующего трудоустройства. Но чтобы только попасть на обучение нужно пройти тест и собеседование по Скайпу (вроде). Вообще хочу попробовать. Хули нет? ладно, прекращаю семенствовать
>>1689888 Тоже записался на эту штуку Задачки не особо сложные, похожи на задачи из бесплатного курса на степике. Только требования к оптимизации более жесткие
>>1689981 Там курс рассчитан на тех у кого уже есть опыт коммерческой разработки от года, насколько я знаю. >>1690017 Не знаю, вообще такие дайджесты публикуются в тематических пабликах вк, каналах тг, но я за этой хуйнёй не слежу. Может быть зря, конечно.
>>1690241 Берешь элемент первого множества и делаешь какой-нибудь reflect.DeepEqual этого элемента со всеми элементами второго множества, если не было ни одного равенства, то аппендишь его в разницу.
Чет я проебал апдейты. Проясните, что за новый пакет errors? Который умеет только Is и Unwrap? Чо за хуйня? Где старый пакет (он же в стд был втащен, нет?) с функцией Wrap, который позволял добавить к ошибке метаинформацию? Какого Х конфликтующее имя? Как этим пользоваться?
>>1690251 Решение несложное. Другое дело что однострочником это не сделать и приходится пилить двойные циклы или использовать мапу, если объекты хэшируются.
>>1690341 Наверное путаешь стандартный `errors` с `github.com/pkg/errors`. Оттуда кое-какие фичи перетащили в стд.
Привет Позволю себе спросить. Я очередной вкатыш, но у меня не горит 1- МЕСЯЦА ВКАТИТЬСЯ. Сейчас работаю по другую сторону - пишу тз для погомистов, анализирую и все такое. С зп все заебись, и ооооочень не хочется вкатываться на зп джуна. Я понимаю, что вообще охуели эти вкатыши, но есть ли возможность сидя дома, не меняя работу (на фриланс не надеюсь), дорасти до уровня миддила из дома? Других языков море, вакансий больше, но не хочу с триллиардом народу конкурировать.
ps почему в США, Англии и прочих странах - go самый востребованный? Я так понимаю, что речь не про джунов, а про топовых помидоров и тимлидов? Смотивировал анон выше, который писал, что джунов найти не могут в РФ
>>1690400 >Я понимаю, что вообще охуели эти вкатыши, но есть ли возможность сидя дома, не меняя работу (на фриланс не надеюсь), дорасти до уровня миддила из дома? Нельзя. Миддл - это не уровень знания языка, а уровень умения решать задачи. Да никто не возьмет прогера без коммерческого опыта разработки на мидла. А при текущей экономической ситуации, даже на джунов не берут без опыта
>>1690400 >почему в США, Англии и прочих странах - go самый востребованный? Не самый востребованный, а самый высокооплачиваемый. Скорее всего, потому что го хорошо подошел на роль языка для следующих целей: 1) Написания прототипов для стартапов 2) Переписывание легаси на php/python/java под микросервисы и тд.
Вкатыши нужны - большим компаниям, у которых есть ресурсы, что бы научить пол себя и поездить на шее, пока не опомнится - галерам. Можно платить мизер, а продавать как ммдлов. - маленьким провинциальным компаниям. Потому что нет у них выбора, и приходится работать с теми, кто есть
>>1690457 >- маленьким провинциальным компаниям. Потому что нет у них выбора, и приходится работать с теми, кто есть Спорный момент, кстати. В моей мухосрани каждый год выпускников около-айтишных шараг больше чем рабочих мест, и по этому даже с образованием многие идут катриджи заправлять. А вкатышей даже для этого не берут. Я так и не нашел работу и решил понаехать в ДС чтобы вкатиться
>>1690457 Спасибо еще раз Бля, просто крик души - не выбрал погромирование в юношестве, и теперь в 27 уже хуй сменишь, либо только на зп джуна (и нет, это не выебон и не высокое самонение)
>>1690410 Да ладно, там же на любом можно. Просто поинтересовался. Все задачи с первого раза решил? Я чёт так волнуюсь как будто бабу первый раз за руку взял. Чёт я нежный какой-то слишком.
>>1690625 с зп проблем нет - около 180, хотя я знаю, что для дс это ничто лол я хочу завести трактор, если честно, а завести его, когда ты ба - это забей, нужно MBA и прочую шляпу думал, мб go или ds (писал тз для обеих отделов) ладно, спасибо, не хочу флудить в адекватном треде своими биопроблемами
>>1690687 2+ года без опыта в смежной сфере и вышки? Кто-то порвал очко и выгрыз оффер. Плюс Европа разная и для полноценного переката нужно продолжать хуярить N лет не перегорая.
Анончик, расскажи немного про архитектуру и прочие бест практисес. Вот я решил сделать простенький HTTP сервер, в будущем планирую добавить базу и код для дергания API с какого-нибудь известного сайта. Пока пришел к такому виду:
В main.go читаем конфиги из TOML, инициализируем логгер и затем для всех дочерних классов вроде httpServer прокидываем их в качестве параметров. Пока на бумаге выглядит хорошо, но что делать после, например, добавления базы в отдельной структуре Store? Как мне ходить в эту базу из того же httpServer? Передавать Store в качестве указателя, чтобы напрямую дергать ее методы для записи/чтения из HTTP-сервера? Или может запустить все методы дочерних классов в отдельных горутинах, чтобы обмениваться информацией через каналы? хотя через каналы методы не подергаешь, говно идея Сам я по работе пишу на Qt, и там эта проблема решается через систему сигналов-слотов, которые можно объявить в main.cpp, и затем спокойно передавать информацию между своими инстансами через emit. moc обо всем позаботится, лишь бы QObject'ом был В Go существует подобная волшебная таблетка?
>Как мне ходить в эту базу из того же httpServer? А как база данных и хттп-сервер связаны? В базу ходят из хэндлеров и юзеры либы сами решают как они получают подключение к бд. Ты в своем сервере предоставляешь только инфу про запрос, респонс и, возможно, контекст.
>>1691435 Проорал от души, /б/рат, поднял мне сегодня на весь день настроение
>>1691430 Го это ЯП, Qt это фреймворк, поэтому если найдешь библиотечку, которая реализует тебе привычное поведение - welcome, ну или напиши сам.
В плане подхода к архитектуре приложения, го концептуально ничем не отличается от остальных языков, просто паттерны из конкуретного программирования встречаются чаще.
Я бы порекоммендовал тебе посмотреть в сторону инверсии зависимостей и инъекции зависимостей гугл, кстати недавно сделали DI-фреймворк wire
>>1691514 Захожу я с браузера например на "localhost:8080/info/id123", на что роутер вызывает соответствующий хэндлер, в котором я хочу выдать инфу (попутно подергав БД) о продукте 123 через io.WriteString. >предоставляешь только инфу про запрос, респонс и, возможно, контекст Снова перечитал и кажись понял, у этого хэндлера же нет в аргументах ни ни одной моей структуры, только внутренние данные о запросе-ответе. >func(w http.ResponseWriter, r ✫http.Request) Тогда сразу возникает другой вопрос. А как тогда роутер выводит те же коды 200/400? Ему же необходимо знать о состоянии сервера, внутренней логики и т.д. То есть хэндлеру все равно для этого нужно подергать методы у других структур приложения, о которых он (согласно сигнатуре) ничего не знает. пойду дальше проводить ликбез >>1691521 >инверсии зависимостей и инъекции зависимостей То что нужно, спасибо!
>>1691568 >То есть хэндлеру все равно для этого нужно подергать методы у других структур приложения Напрямую хттп-сервер не должен знать о каких-то базах данных и т.п., он спрятан за своим пакетом и делает свое маленькое дело. Т.е. хардкодить какой-то стор внутри структуры httpServer не вариант. Какие-то доп. структуры можно в контексте передавать, можно создать структуру с внедренными ссылками на внешние ресурсы и над ней хттп-хэндлеры пилить, можно вообще забить на первых порах и глобальный пулл соединений юзать.
>>1689890 >Задачки не особо сложные, похожи на задачи из бесплатного курса на степике. Только требования к оптимизации более жесткие Подожди, тебе уже задачи выдали? Я вчера зарегался, но пока на почте - пусто
>>1691564 Хуй с ним, не кооперируйтесь со мной. Скажите хоть, чтобы память оптимизировать файл по частям читали или алгоритм настраивали? А то может я не в ту сторону иду
>>1691430 Создаешь три уровня: сервер, контроллер, база Сервер - это хендлеры, там обрабатываешь инпут, проводишь валидацию. Дальше вызываешь метод контроллера. В контроллере делаешь обработку данных, вызываешь методы из базы В базе у тебя методы только для доступа в базу и ничего большего. Связь между уровнями строишь через интерфейсы. То есть, у тебя должен быть интерфейс базы и его реализация. Твой контроллер будет зависеть от интерфейса базы.
А вообще погугли Clean architecture, Hexagonal architecture, DDD architecture
Эй, гошники, какого хуя структуры не копируются? Неужели идиоматичным является написания метода Copy для любой поебени? Щас короче искал 15 минут баг из-за того что присвоил структуру..
Ну-ка, подскажите мне. Я добавил поддержку модулей через 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.
Sup харкач. Да, я охуел. Помоги решить задачу из контеста - с 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, стоит рассматривать это как превышение времени исполнения."
То есть РантаймЕррор может говорить о неправильном ответе, а не о падении во время выполнения.
>>1692079 Ну так у тебя функция случайное количество времени ждет, понятное дело что в output другой порядок будет, который зависит от времени исполнения f.
>>1692093 Из условия следует, что порядок не должен зависеть от времени f >>1692095 Я думаю, что ответы должны быть по порядку, но это должно решаться не задержкой
>>1692231 Попробуй каналы буферизированными сделать, размером n. Тогда у тебя следующее вычисление f(x1) не будет ожидать предыдущего вычисления f(x2). Грубо говоря забиваешь каналы сразу как можешь, а 3-я просто ждет и суммирует.
>>1692231 А про функцию f(int) что-нибудь известно? Может там числодробилка, которая только от своего аргумента зависит, например (n!), где n мб достаточно большое. Тогда ее можно было бы закэшировать, как вариант.
Решил попробовать вкатиться в Go просто ради интереса и столкнулся с такой проблемой. Все учебники, которые я нарыл, делятся ровно на два типа. Первый - тебе пол часа объясняют как объявить переменную, глав полторы штуки и в них считай базовый синтаксис (golang-book). Второй - тебе вообще нихуя не объясняют и с первой же страницы начинают душить примерами кода по 20+ строк и веб серверами (Язык программирования Go Кернигана). А есть что-то для новичков?
>>1692316 >>1692325 Открыл "Язык программирования Go" Там действительно в первой главе накидали примеров - но уже со второй начинается учебник для новичков
>>1692316 Керниган норм. Ты хоть содержание глянь. Эти примеры по 20 строк кода чисто часть первой главы "Учебник" или что-то такое. Блиц курс так сказать. После неё он каждую сущность разжевывает.
>>1692328 >>1692330 Действительно, но я уже вот только что сам это понял. Ну окей, буду пытаться Хотя 99% загнусь очень быстро, у меня очень неприятное сочетание дикого интереса к программированию и непроходимой тупизны вкупе с совершенно неподходящим гуманитарным мышлением когда ты смотришь на массивы/срезы и просто активно не понимаешь о чём тут, перечитываешь по три раза и всё равно не понимаешь. По крайней мере так с golang-book было, мб здесь получше станет
>>1692341 Это хуйня про гуманитарное мышление. С первого раза не поймешь. Нужно почитать, попрактиковать, поспать и это все постепенно начнет перевариваться.
>>1694125 >>1694157 Два дебила, один хуйню посоветовал, второй обрадовался. Один csv файл из разных можно хоть на питоне слепить, хоть на го, хоть на баше.
А как подменять либы? Вот есть приложение и библиотека. Первое использует последнюю версию из мастера либы. Нужно изменить либо и отладить эти изменения в приложении. Как это сделать? Если просто поменять код в вендоре или модулях, оно не собирается из-за проверки хэш сум(
Когда я объявляю интерфейс в качестве параметра функции, то я могу передать в него указатель на объект вместо передачи по значению? Объект удовлетворяет интерфейсу, имеет все методы и т.д. Я сперва попытался объявить ссылку на интерфейс, но компилятор и стаковерфлоу запретили мне это делать.
При переезде в мск, сразу сотня. Через пару лет 200. Что бы 300, надо либо в удалёнку на запад. Либо в лиды в России 300к неохотно платят, особенно в кризис.
>>1696744 Эх, вот щас дочитаю книжку про го и вкачусь к вам. Хотя кого я обманываю, у меня уже давно синдром вечного студента, который всегда что-то учит(
>>1696744 гоферы, пользуетесь ли вы какими-то репортерами для тестов? хочу что-то типа аллюра, чтоб генерился отчет и чтоб плагин к дженкнсу был)))) мимо автоматизатор на го
>>1661813 (OP) Сап. Возникла идея наклеплепать небольшой говно сайт.Нагрузка небольшая - пишу для себя. Т.к. нагрузка небольшая, а похепе нинужно встал выбор между Пистоном и Go. Выбрал Говно за статическую типизацию. Вопрос бывалым сайтостроителям: какой фреймворк выбрать? Конечно у Goвна богатая стандартная либа, но писать всё руками с нулями нет желания. Gorila топ за свои деньги? Может Go вообще не подходит для этой цели? И небольшой оффтоп: можете что-ниудь посоветовать для веб мордыпосле HTML,CSS,PureJS'а, полному нулю в формошлёпстве?
>>1698436 По поводу бека соглашусь с >>1698501, но можешь и горилу взять, если хочешь. Но важно понимать, что это все - узко специализированные библиотеки, и в го фреймворки не принято использовать (их и нет по факту). Если хочешь именно фреймворк - бери джангу, не прогадаешь. Насчет фронтенда хочу дополнить, что если задача небольшая и не будет особо развиватся - можно попробовать остановиться на "html/template" + Bootstrap
>>1698501 >На фронт, если не хочешь учить большую тройку, а надо что полегче, то svelte. 90% реакта учится за пару дней (из которых первая половина первого дня - синтаксис es6, а вторая половина второго - понимание того, как теперь это все запустить). Потом по желанию всякие хуки-хуюки и тайпскрипт, но и без них уже все хорошо пишется.
>>1699493 Разве дженерики сломают обратную совместимость? Это будет уже головная боль всяких мейнтейнеров пакетов, переписывать все заново и тянуть легаси.
>>1698436 У го такой подход, что нет фреймворков, есть библиотеки-пакеты, которые решают конкретную задачу: роутинг, построение sql-запросов, маппинг данных и т.п. и фреймворк ты собираешь себе сам. Это хорошо тогда, когда ты понимаешь, что тебе нужно и вообще есть опыт выстраивания архитектуры проекта. А для новичков, особенно беглецов с языков с фреймворками, конечно, боль.
>>1699484 Пока - неизвесно. Более того, возможно изменение дизайна и оно будет как-то по другому работать. >>1699512 Они постояннно говорят, что не хотят повторять истории с питоном и большинство нововведений v2 будут и в ветке v1
>>1699730 >Они постояннно говорят, что не хотят повторять истории с питоном и большинство нововведений v2 будут и в ветке v1 Типа если добавить обратно не совместимые изменения в версию 1.5 а не 2.0 то у нас будет не как в питоне?
>>1699781 И как это облегчит миграцию? В случае с питон 2/3 там хоть было ясно зачем мигрировать - новые фичи только в ветке 3. А тут у тебя есть все новые фичи, кроме тех что обратно не совместимы и получится пикрилейтед.
>>1699793 Тут нужно понимать, что этот язык создавался и развивается в первую очередь для нужд гугла. Исходя из этого, как я думаю, они хотят сделать поддержку легаси максимально комфортной. >И как это облегчит миграцию? В том-то и суть, что - никак. Наоборот, необходимость в ней отпадет. Старые сервисы так и будут на go1
>>1699849 >В том-то и суть, что - никак. Наоборот, необходимость в ней отпадет. Старые сервисы так и будут на go1 Но это же судьба python2, которую не хотят повторять.
>>1699793 ХЗ что в вашем го, в питоне была проблема, что часть ключевых вещей сначала сделали искусственно несовместимыми. То есть просто невозможно было писать код на питон-2, чтобы он заработал на питон-3, и наоборот. Из-за этого миграция была очень сложной и от попыток просто отказывались.
Самый яркий пример - юникод строки. В питон-2 надо было писать u"строка" (с префиксом u), а в питон-3 все строки были юникод, а префикс u был запрещён. И всё, при всём желании не сделаешь совместимость из-за самой-самой базовой вещи.
Спустя 4-5 лет в питон-3 всё-таки добавили префикс, и можно строки указывать без префикса, а можно с u-префиксом для совместимости, без разницы. Но много лет было потеряно.
Кто-нибудь смог решить задачку от Озона? Мне кажется у них что-то не то с условиями/проверкой, ибо я хз что не так (локально все отлично работает) https://play.golang.org/p/ZI4zJceVenU
>>1700049 Да, у них индусы за десятки килобаксов в месяц будут это все поддерживать. Но в остальных конторах ты либо вообще не найдешь разраба, готового в 2-м питоне ковыряться в 2020 тысячелетии, либо он запросит столько денег, что тебе дешевле все это будет переписать таки на 3-й
>>1699849 >Тут нужно понимать, что этот язык создавался и развивается в первую очередь для нужд гугла. Исходя из этого, как я думаю, они хотят сделать поддержку легаси максимально комфортной. С гуглом понятно, они пишут на своих собственных тулах и либах и им похер, А простым то сметным что делать? Ты вот хочешь писать на Go 2, юзать дженерики и все такой, но твоя либа поддерживает только Go 1.х и ты сосешь бибу.
>>1699849 >Наоборот, необходимость в ней отпадет. Старые сервисы так и будут на go1 Ну так это и есть путь Питон 2 в чистом виде. Сапортить его будут, но вечно тянуть две ветки кода - слишком сложно. Думаю лет 5 побекпортят фичи, а потом еще 5-10 багфиксы. Все как у питончика.
>>1699622 Так тесты-то на питоне, лул. Те тесты, которые на го, они штатными гошными средствами запускаются и это полное говно, а не средства Не понял твой вопрос сходу