Cамого МУЖЕСТВЕННОГО в мире языка Go тред №18 /go/
Go или Golang — компилируемый язык программирования от создателей таких шедевров, как UTF–8, язык С, UNIX, Plan9 и других. Go поддерживает типобезопасность, богатую и универсальную стандартную библиотеку функций и инновационные семантики одновременности: все то, что мы в индустрии называем concurrency и parallelism. На сегодня язык Go является маяком стабильности, прагматичности, де факто представляет из себя стандарт в мире бэкенд–микросервисов и серверного оркестрирования.
Обсуждаем язык, смеемся с залетных крестоносцев, обсуждаем почему нам не нужны дженерики, наследование и эксепшены, по каждому багу находим трехстраничный пост в официальном блоге Go, объясняющий почему это на самом деле фича, ждем, когда нам завезут дженерики (в 1.18), наследование и эксепшены.
Растобляди жабобомжи завидуют и рвутся в треде, сектантская запарта не переваривает.
>golang > Я только сегодня понял, что почти никто толком-то и не понимает, зачем вообще Go нужен. Если коротко, то Go нужен для того, чтобы проектировать robust software. Я не знаю, как правильно перевести это слово на русский, но это скорее всего что-то вроде «надежный». Так вот, Go сделали, потому что гуглу нужен был инструмент для написания надежного кода. На самом деле не сколько гуглу, сколько Робу Пайку, который последние две декады, как минумум, одержим идеей сделать сишку с каналами и зелеными потоками. Так получилось, что Роб Пайк попал в нормальную компашку с другими штрихами из Bell Labs, крутейшим Russ Cox, Фицпатриком и т.д. Этим ребятам несложно было убедить гугл, что им нужен новый язык и вобщем-то, бабосики они на него выбили.
> Так, это было небольшое лирическое отступление, давайте вернемся к теме. Да, зачем же все-таки гуглу был нужен новый язык? Ну, тут все понятно, давайте послушаем слова самого Роба Пайка:
> Фишка в том, что наши программисты гуглеры, а не ученые. Это обычно молодые, только выпустившиеся пацаны, которые возможно выучили Java, возможно даже C/C++ и может быть Python. Они не в состоянии понимать пробздетый язык, но мы все равно хотим, чтобы они делали хороший софт. Таким образом, мы даем им легкопонимаемый язык, к которому они быстро привыкнут.
> А теперь давайте попытаемся понять, что же он имел ввиду. Если грубо говоря, то он сказал, что в гугле работают не самые умные ребята («не способные понимать крутой язык»), так что они придумали такой язык, который просто невозможно не понять. Это на самом деле очень круто для менеджмента. Посудите: можно нанять 100 посредственных программистов, дать им в руки Go и эта армия обезьян будет генерить вам много «неплохого» и очень даже поддерживаемого кода! Go это фантастический инструмент для менеджмента, лучше не придумать: моментально загоняем всех программистов в рамки go-fmt (никто не сможет пропихнуть свой стиль форматирования), забираем у них любые абстракции сложнее интерфейса и получается такой конвеер кода, в котором developer is just another brick in the wall. По-моему, очень круто! Ну, программистам скорее всего такой расклад не очень понравится — мало кто любит быть винтиком в системе.
Здравствуйте, меня зовут Анон и я долбоёб. Что я, блядь, делаю не так? Программа простейшая же. Дебаг уезжает куда-то в бесконечный вызов системного стека и виснет нахуй после ввода значения.
>>2166454 Переписал. https://pastebin.com/gY1F0Xf3 Повисло абсолютно там же. Конкретно вот на этой строчке всё в пизду летит. > cgocall(asmstdcallAddr, unsafe.Pointer(c)) В описании функции вот такая хуйня: > Call from Go to C. Нужен С в зависимостях, или как это должно работать?
Не пиздите тряпками, плез, я кода никакого джва года не писал, SQL не в счёт.
аноны, подскажите пж перевкатышу с джавы на го, где найти нормальные гайд\туториалы\книги по бэку на го. Всё что не находил - с места в карьер сразу, без каких-либо дополнительных объяснений
>>2167349 Мне вполне зашла книга, которая Язык программирования Go. Все вполне себе кратко изложено для тех, кто уже знаком с программированием, ну т.е. не скучаешь. И практических заданий завались, особенно начиная с горутин и каналов, дают просраться не слабо. Собственно после этой книги я уже свободно писал на Go, посматривая в документацию.
>>2167592 Окей, глянул содержание - я так понял это книга больше по основам Go, чтобы выучить всякую многопоточку, ну и вообще не быть лохом в базовом синтаксисе. Ну а по бэкенду? Книги\туториалы по написанию тех же простеньких RESTApi, или CRUDа с какой-нибудь БД где можно откопать, пока нашел на гитхабе какие-то полу-гайды
>>2167643 Вот полных гайдов нормальных не думаю что найдешь. Просто придумываешь идею для сервиса и идешь гуглить фреймворки/либы под это дело, если чего-то не находишь - пишешь сам. Например нужен тебе микросервис с REST API и коннектом к базе. Ищешь HTTP фреймворк, тот же Gin, например, супер простой. Ищешь коннектор к PostgreSQL/MySQL/etc. Если какое-то взаимодействие между сервисами, то можно GRPC впилить. И так далее. Изучаешь их по отдельности и пишешь код.
>>2168410 Есть вариант дослужиться до мидла/синьера на другом языке, а затем свичнуться, большая часть гоферов по такому пути пришли. Но это всё фигня, вкатунов в го всё равно меньше чем вакансий ждунов, смело иди на собесы
Если допустим репозиторий выбросил ошибку что низя делать инсерт, то полагается прямо ошибку постгрес драйвера в контроллере обрабатывать, или же делать свой тип ошибки, обработать всю постгрес хуйню в репозитории при сохранении и в контроллере уже только проверить что ошибка кастомного типа "nemogusohranitoshibka.go"?
>>2168499 Суть паттерна репозиторий в том, чтобы абстрагировать слой данных от остального приложения. Т.е. хорошо написанный репозиторий должен быть легко заменяем другой имплементацией без изменения кода приложения. Так что да, я всегда создаю отдельный пакет репозиторий, который содержит интерфейсы репозиториев всяких сущностей + определения ошибок или просто их значения, т.к. в большинстве случаев хватает именно синглтона ошибки стандартного типа
>>2168525 Ну я тоже верил в шизотеории про то, что вкатуны с говнокурсов если не сегодня то завтра точно отберут у меня работу, но потом меня повысили, я стал проводить больше собеседований и я понял на сколько это далеко от правды. У меня теперь другая шизотеория, что курсы на самом деле отупляют людей, которые до этого были способны сами прочитать книжку, настроить себе окружение и написать калькулятор. Но из-за того что привыкли что их водят за ручку на этих самых курсах они окончательно потеряли способность самостоятельно находить информацию
>>2168587 >Но из-за того что привыкли что их водят за ручку на этих самых курсах они окончательно потеряли способность самостоятельно находить информацию
>>2168607 >Профильный студент Не имеет никаких навыков по написанию поддерживаемого кода и больших проектов, а в случае с говной и жизненно необходимым навыком правильного написания распределенных систем
Я когда только выпустился мне на первой работе так жепь разорвало от того, что после вуза пришлось люто доучиваться на самой работе
>>2168610 >навыков по написанию поддерживаемого кода и больших проектов, >а в случае с говной и жизненно необходимым навыком правильного написания распределенных систем
>>2168613 Так они и нужны в очень небольшом количестве, что бы расширять постепенно штат сотрудников что очень часто не работает потому что они сваливают как начинают ощущать себя мидлами
>>2168886 > гриндить литкод >>2168610 >навыков по написанию поддерживаемого кода и больших проектов, а в случае с говной и жизненно необходимым навыком правильного написания распределенных систем
>>2168607 Ты охуееш когда узнаешь на сколько там всё плохо, если это не топ-5 вузов страны. А если топ-5, то их еще за 2 года до выпуска забирают к себе крупные конторы и обучают под свои нужды
>>2172713 >>2172737 >На чем угодно. Не на чём угодно, в идеале, нужно скомпилировать бинарь, если знаешь точную конфигурацию машины жертвы. А там уже остаётся только через бэкдор скачать бинарь на машину и запустить. Скачивать интерпретаторы или ВМ не вариант, так как это легко можно спалить антивирусом.
>>2172748 99% массовой малвари под шинду, к линупсам в любом случае нужен индивдуальный подход, там работают точечно. На что и намекае статья с списками APT, эти не сшибают мелочь с миллионов, а работают по крупняку.
https://github.com/golang/go/issues/45346 Видели уже? Что думаете? Как по мне - хуита, можно было безболезненно сделать поведение с тильдой по умолчанию и не засорять код ненужными символами
Анон, есть ли какие-то удачные паттерны для работы с каналами?
Мне, например очень понравилась errgroup ну это не паттерн, но как бы ты понял что я имею в виду - удачный и изящный конструкт. Типа нужно запустить горутины, которые могут поймать ошибку. И красота в том, что нет ни строчки лишнего кода. eg.Go() и пиздец. А под капотом целая машинерия на каналах.
Но что если нужно например ограничить количество параллельных горутин? Я вижу два варианта: - Делать какую-то конструкцию с каналами (видимо буферизованными или с семафором). Получится громоздко. - Использовать ту же ерргруппу, но добавить семафор не понимаю, почему его не сделали опциональным параметром ерргруппы. Не так громоздко, но все равно лишний код.
Мне кажется должны быть уже известные рецепты/инструменты для таких типичных кейсов.
>>2177248 Ну можно через пулл воркеров ебануть. Запускаешь сколько надо воркеров, например 4, на каждое ядро, и через канал отдаешь им таски, через другой канал смотришь ошибки (можно обернуть в тот же Wait). Но это довольно громоздко.
Вообще я немного ступил в своем вопросе, ограничить горутины семафором легко (пикрелейтед) - это достаточно лакончино получается.
Я хотел сказать другое. Есть пул задач, которые мы хотим разбирать в N воркеров. И есть их результаты работы, которые мы хотим разбирать в M воркеров. (Ну например: ходим во внешний сервис 10-ю воркерами, пишем в базу 2-мя. Условно.)
Суть очень простая. Но на чистых каналах это будет ебаная простыня. Мне хочется какой-то конструкт, чтобы что-то типа: err := pipe. -- Funout(10, func() {}). -- Funnel(5, func() {}). -- Wait()
>>2178871 Если бы хач полностью выключил разметку в /pr/, это бы принесло больше пользы, чем вреда. То индекс по i проебётся, то указатели, а используют подчёркивания-курсив в тексте в основном одни шизики.
>>2177673 >Мне хочется какой-то конструкт, чтобы что-то типа: >err := pipe. >-- Funout(10, func() {}). >-- Funnel(5, func() {}). >-- Wait() Ну без дженериков такое использовать очень неудобно, но можешь обмазаться https://github.com/ReactiveX/RxGo
Попросили написать сервис для генерации jwt access и refresh токенов, проверки и выдачи новой пары. Я в го совсем недавно, хочу устроиться кодером на бэк, хоть куда-нибудь, всё зделал за пару дней. Вместо gin лучше самому движок написать? Они попросили не использовать ничего кроме го и монгодб. Просто хз как надо.
А ещё вопрос. В "hash" есть интерфейс hash.Hash. Функция из "crypto/hmac" hmac.New(...) возвращает тип hash.Hash структура вроде как или хз. Хотел написать что-то вроде этого:
С обращением через h.Hash. По другому не работает. Пробовал type Hash hash.Hash, type Hash struct {hash.Hash}, Но в тех и других случаях получается не то что хотелось бы. Интерфейс можно указывать как выход, но для него нельзя добавить новый метод получается?
>>2179930 Вот ещё, в самой либе hmac. Он возвращает hash.Hash, но делает return Hmac. Можно просто на вывод указать интерфейс, а там любой тип, лишь бы реализовывал его? В чём плюсы так делать? Чтоб рефакторинг не проводить потом?
>>2179930 >Вместо gin лучше самому движок написать? На самом деле стандартный net/http не так и плох, для твоей задачи более чем хватит > Интерфейс можно указывать как выход, но для него нельзя добавить новый метод получается? Да, ты можешь заембедить в свою структуру либо другую структуру, либо интерфейс, но добавлять метод к типу из другого пакета ты не можешь. >>2180218 Вообще рекомендуют в общем случае принимать в аргументы интерфейсы, а возвращать конкретные типы, а кому надо - они уже дальше в интересы явно или неявно преобразуют.
Если девопс - тебе в общем-то кубернетиса более чем хватит чтобы охуеть от количества материала, а когда будешь в кубере понимать - там уже по вакансиям смотри что на рынке требуют.
Сап гоферы, кто-нибудь может пояснить тупому бекендеру пишущему на интерпретируемых динамикодриснявых и т.д. языках как понять ебучие указатели и как научиться понимать где использовать указатели и где не использовать? Я пришел в го после трёх лет работы, уже полгода пишу на нем и до сих пор не понимаю сраные указатели. Повезло попасть в проект, где в основном уже всё готово и я просто добавляю роуты по аналогии с уже имеющимися и таким же образом дёргаю базу. Сам с нуля я хуй бы всё это написал т.к. имею слишком низкий IQ для понимания указателей, но может всё-таки кто-то здесь сможет мне помочь?
>>2185766 >на интерпретируемых динамикодриснявых и т.д. языках Ты жалок и слабодушен. Ради ответа на вопрос поносишь себя говном и свои альма-матер. Мать тоже продашь за сгуху при соответствующих обстоятельствах?
>как понять ебучие указатели Что там понимать? Указатель это ссылка на область памяти. Передаешь в функцию указатель - прыгаешь к данным по ссылке и работаешь с ними. Передаешь в функцию не указатель (значит само значение) - получаешь копию области памяти и работаешь с копией. Отсюда два сайдэффекта: - Указатель занимает 64 бита незвисимо от того на что указывает. - Работа с указателем повлияет непосредственно на оригинальные данные, а не на копию.
>>2185766 Ну, если ты из интерпретируемых динамикодриснявых языков, то просто используй поинтеры к любой структуре, которую ты сам определил, семантика будет такая же как ты и привык в своём ${языкНейм}
>>2185893 Единственное исключение - старайся не передавать поинтеры в каналы, либо если передавать - то больше не использовать его в той горутине откуда ты его отправил.
>>2185834 Не ради ответа на вопрос, а просто констатирую факты, которые обнаружил через работу с этими языками, потому и решил переходить на го или дотнет или джаву, вот го первым подвернулся. И не себя поливаю, а инструменты, на которых работал. Альма-матер? Ты слишком серьезно относишься к лопатам и киркам.
Про область памяти понятно, не понятно когда их использовать, а когда нет. Из твоего ответа не понятно, зачем вообще нужны указатели, если можно каждый раз не использовать их и просто передавать копию? Байты экономить?
Если ты считаешь го дрисней, то какие языки не считаешь?
>>2185893 В текущем проекте поинтеры как будто бы произвольно используются, и сущности из стандартной библиотеки тоже то с ними передаются, то без них.
>>2185894 Во втором случае больше не использовать в горутине даже если из канала он просто читается и ничего больше с ним не делается? Данные по ссылке ведь те же самые должны остаться
>>2186308 >не понятно когда их использовать, а когда нет Используй указатели для больших структур или если объект должен быть мутабелен. В остальных случаях передавай копированием, всё. Про согласованность методов структуры читай ниже. https://golang.org/doc/faq#methods_on_values_or_pointers
>>2186308 >если можно каждый раз не использовать их и просто передавать копию? Байты экономить? Представь себе, да. Когда про говноязыки говорят, что они текут, имеют в виду именно рост потребления памяти по времени работы процесса. Если хочешь в документации к своему говну написать "нужен перезапуск процесса по крону раз в час", то да, можно не использовать указатели и просто передавать копию.
Каждый раз передавая массив в функцию, тебе придется выделять память под новый массив, а gc убирает старый. Программа потребляет в разы больше памяти и сколько-то процессорного времени.
>>2188023 >Программа потребляет в разы больше памяти и сколько-то процессорного времени. Ты уверен, что потребляет в разы больше памяти? Тем более gc это быстро чистит, и процессорного времени он занимает не много, он го охуеть какой эффективный, особенно по latency.
Важно также понимать, что часть переменных алоцируется на стеке и не нагружают GC. Что именно будет алоцировано на стеке а что в хипе - решает escape analysis на стадии компиляции. В любом случае, вы сейчас занимаетесь теориекрафтите преждевременные оптимизацию не столкнувшись с реальной проблемой в производительности, а такие вещи лучше решать по месту.
>>2188023 что либо предполагать тут бессмысленно, надо запускать escape analysis.
Есть несколько нюансов по котороым память выделится в хипе: 1) При неопределенной длине слайса/мапы 2) При возврате указателя с функции/метода (ИМЕННО return) 3) При создании глобальной переменной в пакете 4) closure (лямбды)
1) Массивы(не слайсы) с определенной длиной передаются by value(слайсы по идее тоже, но там только хэдер, а данные по указателю) 2) При передаче указателя в аргумент функции, данные не будут выделяться в хипе 3) Гошный stack очень сильно отличается от стэка других ЯП, если кратко сказать то он эластичен и может изменяться, но задетектить это кажется нереально (надо глянуть сурсы). Поэтому большие массивы у которых длина константна могут уложиться в стэк (если данные массива занимают больше 65536 байт то он уйдет в хип, при меньшей в стэк)
>>2194469 ОС будет либо консолью для админов, где можно ставить только серверный софт, либо браузером, где свои приложения ставить запрещено, постоянный доступ в интернет обязателен.
>>2194473 >консолью для админов, где можно ставить только серверный софт Такой-то манямир неосилятора линукс. Для текстовых консолей есть и музыка, и игры, и отображатели картинок даже. ASCII-видео разумеется не завезли, но оно и не нужно.
Какой-то сложный язык. Хожу на курсы от одной ит-конторки, и перестал понимать что-либо в нем. Синтаксис какой-то захламленный, а контекст вообще не понятно зачем нужен.
Бэк на Го в целом чем отличается от "крудов" на Node.js? У меня есть небольшой опыт разработки бэка на Python и Node.js, но сам я фронтендер который пилит фронт уже 3 года. Знакомые советуют перекатываться в бэк на Го возможно, в будущем я так и поступлю, но чет ссыкую понизить грейд до джуна. Поетому мне интересно почитать про архитектуру типовых проектов на Го, что в целом спрашивают на собесе у мидлов.
>>2196753 Пакеты с npmjs.com не могут исчезнуть? Пакеты с pypi.org не могут исчезнуть? в го модулях тоже можно переопределить откуда пакет тянуть (replace) https://golang.org/doc/modules/gomod-ref
Ребята, как в Go достать жсон из гет запроса? У меня есть API мне нужно с него получить данные в виде ЖСОН чтобы дальше с ними работать, но у меня получается вывести только в байтовом виде(какая-то хрень выводится) или в виде строки(в виде строки нормальные массивы)
>>2197710 для двоча подошло, конечно, но для моей задачки нет. массивы данных у меня в текстовом виде представлены и только когда я выбираю в консоли браузера вкладку с get параметром, то в ответе вижу json. Пытался в самом браузере в поисковой строке дописать .json в конце строки, так он мне просто null вернул(браузер, не Go)
Ты же в курсе, что ты логируешь ошибку? Этот метод "анмаршалит" данные в структуру V и возвращает ошибку. Нормальный код выше уже написали, он должен работать. Проверь правильность работы АПИ, или чего нибудь ещё, ошибка может быть очень глупой.
>>2198477 Анон, расскажи о себе. Что такого произошло в твоей жизни, что ты решил тратить своё свободное время на засерание го треда? Где ты свернул не туда?
Как в ГО происходят прерывания для переключения задачи? В питоне все понятно, поставил await и это сигнал менеджера, а тут чет не нашел ничего подобного.
>>2199534 Тут почти как в OS - планировщик всю эту херню крутит-вертит и мапит m горутин на n тредов, а когда они доходят до всяких time.Sleep, сисколов, мьютексов и каналов - передает управление другой горутине. Но ты можешь руками вызвать runtime.Gosched(), если тебе очень надо.
>>2199675 Лул, я на позицию го-дева прошел в банк только закончив тур и написал говноборду. На собесе только про прошлый опыт с питоном спрашивали и пару задач с которыми даже даун справился бы. и отвалился на СБ так как не хотел ИП закрывать, который я для апворка использую
>>2165418 (OP) Товарищи Аноны, имеет ли смысл брать GO первым языком программирования? Если нет посоветуйте какой-нибудь другой(Сижу под линей, С# не предлагать)
>>2200303 Не имеет, го для миддлов, перекатывающихся из других языков. Язык выбирай по области, которой хочешь заниматься, хоть жаба, хоть жс, хоть кресты.
>>2200401 А чего не дается-то? Основная разница в sync пакете валяется и в каналах, ну и в байтоебле с профилированием и высчитыванием шо стек шо хип как любят плюсовички, а просто говнокодить контроллеры и репозитории все одинаково
>>2200515 Контекст, горутины, каналы, кривой синтаксис, постоянные err != nil, ругань о том, что что-то объявлено и не используется, громоздкие отправки GET и POST запросов, странные интерфейсы. В общем у меня ошибка на ошибке. Решу одну, всплывает другая. Ну и конечно же подкрепляется это тем, что из-за необычности синтаксиса понимание написанного дается в несколько раз сложнее.
Знающие аноны! У меня есть вопрос по циклу с горутинами, может подскажет кто-нибудь умелец? Вот есть цикл который с 10 итерациями. Каждый раз в цикле запускаются анонимные горутины, которые записывают в канал(int) число возвращаемое из функции(которая выполняет какие-то действия и возвращает int) Далее после всего цикла перед return я читаю все 10 значений из канала, НО получаю половину значение с числом 1. Вопрос, как получить все 10 значений из функций в горутинах?
>>2200303 >имеет смысл GO да >под линей это типа линукс? я так понимаю ты собрался сервера писать, есть же .netcore нормально пишут на нем сервера.
> Если нет посоветуйте какой-нибудь другой похуй какой, везде придется учить клиент-серверная архитектура, основы сетевой работы, rest, docker, kuber, БД, bash, и прочие команды терминала. Именно язык тут 10-30%. Думаю лучше начать с python у него тонны документации на ру. Если ты читаешь на инглише и смотришь видосики то можно и ГО. На работу можешь подаваться когда осилишь условно 10 серверов, зальешь на гит с нормальными коментами.
Помню смотрел когда кщк 1.13 было и угарал с этого go111mod и ручного складывания в go.mod. Как там сейчас? Все так же зависимость ставится глобально, да еще и что-то там настраивать в путях надо?
>>2204242 > Все так же зависимость ставится глобально, да еще и что-то там настраивать в путях надо? Если ты намекаешь на node_modules, подобного говна нет и никогда не будет ни в одном нормальном языке. Несколько версий одного пакета можно держать менее костыльными способами.
>>2204250 Конечно написано, только это документация для питона go get -u github.com/gorrila/mux rm -f $(go env GOPATH)/pkg/mod/gorrila Пиздец комманда для удаления.
>>2165418 (OP) Привет задроты. Я тут мимо-фулстак-жс-макака, решил расширить кругозор и углубился в этот ваш го. Осилил интро до момента "у нас нет классов, а метод это функция с указанием типа-ресивера"
Сказать что я охуел это ничего не сказать. Поэтому у меня к вам сходу несколько вопросов.
Как тут у вас с ооп? Наследования нет, как я понял, как же вы тут живёте? Утиная типизация?
Почему нет Классов? Нет классов значит нет конструкторов значит нет реализации базового функционала? Или вы там фабриками на каждый чих обмазываетесь?
Нахуя указатели? Тут я вообще не траллю. Там же у вас сначала надо чо-то объявить, затем взять указатель от чегото затем делать по указателю присваивания. Смысл этой свистпляски для меня неясен.
Вопрос последний, который должен быть первым. А нахуя вообще нужен этот голанг? В мире дотнета, ноды и прочего такого?
>>2204817 > Как тут у вас с ооп? Наследования нет, как я понял, как же вы тут живёте? Вместо наследования есть interface embedding/struct embedding. Полиморфизма нет. > Почему нет Классов? Дядюшка Пайк считает, что они не нужны. > Нет классов значит нет конструкторов значит нет реализации базового функционала? Или вы там фабриками на каждый чих обмазываетесь? А что плохого в фабричных функциях? Те же конструкторы, но с названием. > Нахуя указатели? А нахуя ссылки в JS? > А нахуя вообще нужен этот голанг? В мире дотнета, ноды и прочего такого? А нахуя дотнет, нода и прочее такое, если есть голанг?
>>2204823 Ну для начала сразу скажу что я не даю оценок. Я прикидываю закатываться или нет. А для этого мне надо понять как делаются типовые задачи. >>2204823 >Вместо наследования есть interface embedding/struct embedding Можно вкрации на пальцах? Сам я все свои 22 года программирования пишу в ООП парадигме, и очень редко функционально.. >А нахуя ссылки в JS? Ну быстрое сравнение? Безопасность опять жи
>А нахуя дотнет, нода Не ну это слишком тучно. Дотнет это охуенная инфраструктура, сишарп, ебилион пакетов на все случаи жизни, жёсткая типизации, крутейшие иде, кросплатформеность и многопоточность, дженерики, рефлешкн Нода это жс, это нестрогая типизация, опять же ебилион пакетов, ультра быстрая разработка, и опять же крутая инфраструктура
Т. З. Персонального опыта Го смотрится как йет эназер хайпнейм лангуаге. Но я предполагаю что должны ж быть места где он хорош, раз его используют в тырпрайзе? >>2204842 Вот это уже звучит как интересное. Я вот сам думал что асинк авейт ващет могли б сделать поведением по умолчанию...
Окей, я понял что их нет. А в чем киллер фича? Как там прогают асинхронно тогда?
Блять, почаны, хотел в ваш го вкатиться ждуном, но почитав тред передумал. Выглядит синтаксис вырвиглазно, хуже чем PHP, ей богу, это ваще жесть какая-то. Постоянно ошибки, длинные запросы, нет ООП, ссылки называются указателями. Все перевернуто и переебано. За сим отдаю вам вакансию ждуна за 25к - https://hh.ru/vacancy/42302087
На неё еще никто не откликнулся. Для кого-то это в ебенях, но знайте же одно: надо отработать год в ебенях, а потом вы можете работать удаленно. Просто накопите на месяц жизни и езжайте, а потом живите на зп. Удачи вкатышам. А я возвращаюсь в свой любимый фронтент.
>>2196656 А зачем бросать фронт? Чем тебе не нравится? Полно работы и денег, много интересных проектов, что не нравится-то я не пойму?
func Print(s Stringer) - функция которая принимает только объекты которые реализуют метод String(). Правильно реализовать метод String в своем объекте - твоя задача.
>>2204886 >как гарантировать что макакен реализует String() правильно? Не ебёт. Например ты реализовал интерфейс для БД (обычный круд), и с помощью него написал view и controller, пускай теперь другая макака на основе этого интерфейса запилит бд и чтобы она норм работала.
>>2204893 >Дженериков нет НЕНУЖОН, но в 1.19 методичку поменяют. обмажемся по полной. >трайкетча нет НЕНУЖОН >дефолтных параметров нет НЕНУЖОН >перегрузки методов нет НЕНУЖОН
>>2204931 >трайкетча нет Это и ошибка по значению очень сильно влияет на процесс написания кода и архитектуры. Я после года на гоше, кроме как на расте больше не могу ни на чём писать без постоянного затупа.
>>2165418 (OP) надо ли знать ЖС для вката в Го? Это же по сути бэкенд язык, значит надо понимать хоть чуть-чуть что там просходит настороне фронта? Или похуй?
>>2205094 Блять, честно тебе скажу, мб я макака, но за все время пока писал на го, единственным юзкейсом использования дефолтных параметров, были алгоритмы с рекурсией. А для чего они ещё нужны?
Если прям вообще пичёт, то альтернатив много: 1. Кастомный конфиг (Если объект очень большой, сервер или репа) 2. Обычный map (Самый простой, но самый уебанский способ) 3. Как уже написали, опционные функции (Хорошее решение для использования в функциях инициализаторах).
>>2205257 > А для чего они ещё нужны? Для функций/методов, которые делают всё на свете и сразу. Вот в го есть fmt.Printf, который печатает в stdout, и есть fmt.Fprintf, который печатает в указанный райтер, а в том же питоне, например, https://docs.python.org/3/library/functions.html#print принимает 4 аргумента с дефолтным значением, один из них это файл-лайк объект, по дефолту sys.stdout. Вообще для питона это нормально, некоторые функции там принимают по 3 строки аргументов, и если бы не дефолты - люди бы охуевали это всё передавать.
>>2205319 В го стараются не делать большие объекты, зачастую всё подобное говно делают многослойным. Ну и еще есть принцип make zero value useful, но вне стандартной либы его практически никто не придерживается
>>2205315 Тут есть чёткая грань между твоим примером об fmt и "принимают по 3 строки аргументов". Большие объекты можно через конфиг создавать, NewRepo(&cfg{...}) и это будет удобно, а функции которые делают все подряд - говнокод.
Возвращать может созданого юзера, можно ещё делать валидацию внутри функции, чтобы присвоить свои default поля, но придется городить if'ы не самый хуйовый кастыль который я видел в го, так что бздеть по этому поводу не стоит.
>>2207611 "They are a bad idea as they make it much easier to build confusing functions that complicate the API." Хуйню написал если честно, что мешает создавать запутанные API через указатели на структуры вместо дефолтных параметров?
>>2165418 (OP) Перекатываюсь в го из пистона и понемногу ахуеваю. Как вы живете с такими уебищными обработками ошибок, посоны? Это же пизда. А еще я не понимаю где и зачем использовать указатели, потому что я тупой. А еще я не понимаю почему чтобы сделать мапу, нужно обязательно оборачивать ее в make. Пиздец какой то
>>2209433 >А еще я не понимаю почему чтобы сделать мапу, нужно обязательно оборачивать ее в make.
>Map: An empty map is allocated with enough space to hold the specified number of elements. The size may be omitted, in which case a small starting size is allocated.
>m := map[int]int{}
Братан, точно не мне давать тебе советы, но просто в доки смотри.
>>2209433 > А еще я не понимаю почему чтобы сделать мапу, нужно обязательно оборачивать ее в make. Не обязательно, ты можешь создать мапу из значений https://play.golang.org/p/CAH_912zpdJ
>>2209433 Указатель для передачи в функцию большого числа данных.
Вот есть у тебя, например, очень жирная структура. Можешь передать её в функцию без указателя. Тогда функция будет работать с её копией, а копировать большую структуру долго, поэтому лучше передать её адрес в памяти (чем указатель и является), что будет куда быстрее.
Отсюда же вытекает, что если передаёшь что-то по указателю, то функция это что-то может изменить в ходе своей работы (напоминаю, что в противном случае она изменит копию, а не сам предмет).
>>2211748 Думаю это связано с тем, что T и *T вангую макаба съест астериск, там поинтер на Т это разные типы и вполне могут имплементить разные интерфесы, вернее поинтер может имплеменить интерфейс, который значение по поинтеру не имплементит. Соответственно и в ряде случаев просто не имеет смысла использовать значение типов, которые должны быть использованы только через поинтеры. Яркий пример это структуры которые содержат мьютекс или вейтгруппу - их нельзя копировать, т.к. нельзя копировать нижележащие атомики, по тому что это просто не имеет смысла. Возможно еще по тому, что если ресивер передается в часть методов как поинтер, то он скорее всего и так утечет в хип, а копирование поинтера на каждый вызов всё равно дешевле чем копирование какого-то другого, более сложного, типа. Возможно просто хотели снизить когнитивную нагрузку, т.к. вложенность методов может быть довольно большая, и в ряде случаев сложно с первого взгляда определить, меняет ли метод внутреннее состояние или нет. А если меняет и где-то в цепочке вызовов был ресивер по значению - всё сломается, т.к. работа будет уже с копией.
А где почитать, у go есть планы по дальнейшему развитию дженериков в следующих за 1.18 версиях? Что-то я потыкался - прикольно, но пока оно прокатит только для крайне ограниченного числа кейсов. Больше всего не хватает дженериков на методах.
Ладно я, я начинал с си, где нет этих исключений, и у меня вообще нет вопросов. Еще трогал хаскели и расты. Почему все писаются от Option в них, а в го та же пара возвращаемых значений - плохо?
>>2211965 Ну в оптион языках, компилятор по голове не погладит за то, что забыл обработать ошибку/нулл, а в го можно хуй забить или забыть и получить ошибку в рантайме. Так думаю. не знаком ни с одним из этих языков если что
>>2211965 "Все", кто жалуется на обработку ошибок в Go, и "все", кто писается от Option - это две разные непересекающиеся группы людей. На растах-хаскеллях ничего реального не пишут, и интересны они только борщехлёбам, которые и от отсутствия изменяемых переменных в восторге. От сишки-обёртки над ассемблером многого не ждут. А го продвигают чуть ли не как убийцу промышленных языков, при этом не давая их возможностей.
Сап, двощ. После курсов местной конторы есть возможность пройти у них собес на Го-разработчика (на деле фулстака, ибо придётся писать немного логики на фронте). В технологиях числятся Докер, Кубернетис, Постгре, Монго, Редис. Тем кто уже устроился на работу, какие требования были у вашего работодателя и какие вопросы были на собесе?
Я скорее всего завалю ибо тот курс был первый раз когда я вообще написал на языке что-то вменяемое, но почему бы не попробовать?
>>2211957 Главная причина почему не сделали дженерики в методах - это по тому что это усложнит ту часть компилятора и рантайма, который чекает имплементит ли данный тип данный интерфейс. Я не думаю что это что-то принципиально невыполнимое, но пока не ясно нужно ли это вообще кому-либо.
Бля, на хедхантере куча джуновских го вакансий, все ищут себе молодых и перспективных. А в пиндосии также? Или это говно только у нас популярно, потому что быстро и недорого?
как лид разработки, мне больше нравится го - язык простой и чистый, очень легко разбираться в чужом коде, особой дичи не понапишешь, он не прячет сложность каких-то операций за стандартной библиотекой. При этом очень производительный и нетребовательный к ресурсам.
но вот как программист, хотелось бы чего-то более лаконичного, с возможностью каких-то изящных конструкций (раст, скала) и еще большей производительностью
>>2212368 Поддержка у Go лучше, заходишь в любой сервис (heroku как пример), там сразу список из php/java/node/go, rust'a либо вообще нет, либо поддерживатеся на пол-шишечки.
Работодателю нужно чтобы я срочно пересел с питона на го, но так как я тупой хуй и никогда со строго типизированными языками не работал, до меня доходит с трудом. Короче мне готовы оплатить курс от инфоцыган. Посоветуйте какой нить не всратый.
>>2211988 По самому языку будут спрашивать типовые задачки про слайсы/мапы/стринги/указатели и многопоточность: горутины, каналы и пакет sync. Если не дурак, то за пару дней нагуглишь на том же хабре и вызубришь, мне искать лень, сорян. Дальше обычно не лезут, все остальное скорее всего будет ебкой по сопутствующему стеку: SQL-запрос попросят написать-оптимизировать и что-нибудь про деплой и микросервисы спросят. Но я перекатывался с другого стека сразу на миддла, ко мне отношение изначально менее предвзятое было.
>>2213923 Ничем не лучше и не хуже. Хотя оба языка по заявлению разработчиков универсальные и мультипарадигменные, каждый из них хорош только в своих узких задачах, где чаще всего и применяется. Чем ты занимаешься в IT? CRUDы, наверное, на джанге/фласке+химии проще писать, чем на го. >>2213997 Не можешь в десктопный линукс или вообще в линукс? Если первое - то всё нормально, сейчас всё равно всё в контейнерах, особенно в го. Если второе - то тебе стоит задуматься, стоит ли вообще заниматься бекендом, независимо от языка.
>>2214013 как раз и думаю, что все дохуя сложно что в универе, что после не могу его переваривать, да и он меня >>2214020 скорее в первый, но я слишком сильно хочу перекатиться из Германии в Новую Зеландию или Нидерланды и только го сейчас выглядит most indemand
>>2214048 В консольке с brew и другими утилитами работать умеешь? Если не пугает, то велкам, никаких подводных. У нас около половины гоферов — маководы, остальные сидят на линуксах разной степени красноглазия: кто-то как на главной системе, кто-то дуалбутит, а кто-то компилирует ядро прямо в винде через WSL как я, очень хорошо сделали, разве что скорость доступа к виндовым файлам из-за эмуляции ntfs хромает.
Как понять, что микросервис нужно писать на го, а не на петухоне? Есть к примеру дефолтное круд приложение. Что то забираешь из базы, что то пишешь, и результат отдаешь через апи Это же никак от быстродействия самого языка не зависит, а только от скорости обработки в бд. Ну если это не хайлоад какой конечно, хотя в кубере можно все разбалансить Короче, тут наверное много питонистов в прошлом, к вам вопрос, почему вы решили пересесть на го, если 90% задач одинаковые что там, что тут?
>>2214895 На го у нас написана веб морда, которая обслуживает дохуя конектов и делает запросы в другие сервисы с бизнес-логикой на питоне обмазанным типизацией
Если я приду на вакансию ГО с другого стека ( sap) с примерно 2-3 года опыта, то меня будут оценивать как вкатыша или как человека? Был у кого такой опыт? что ожидать, сколько просить?
>>2216674 Ну а ты как хотел? O(len(s)-j)? Практика показала, что мутабельность дороже обходится. Или новый слайс возвращать за деревом удаленных интервалов, чтобы на лету трансляцию индекса делать? Тогда на лукапах по кеш-миссам всосешь. >>2216719 ВК чуть получше будет, но по факту обе суть зашквар.
>>2217586 Ну, на го они более вербозные, и дело даже не в обработке ошибок. Но писать можно, и за них платят немного больше чем на других языках. Из плюсов - неплохой баланс между временем написания и производительностью сервиса. Но как и почти много где - можно немного сдвинуть этот показатель в ту или иную сторону, например используя sync.Pool можно добиться практически полного отказа от аллокаций в хипе ценой сложности написания кода, или использовать пустые интерфейсы+рефлексию, чтобы делать универсальные библиотеки, но ценой производительности. Но главная особенность го - это всё-таки работа с асинхронностью. Если всё что тебе нужно - это аналог js-ного Promise.all, то ты, конечно, не ощутишь разницу, в этом плане sync.WaitGroup более неудобная штука. Но зато она даёт куда больше возможностей, особенно в сочетании с каналами.
Смотри, у тебя есть type MyString string и функция, которая принимает []string С тильдой ты сможешь использовать эту функцию для []MyString без приведения типа в цикле.
>>2218307 Это синтаксическая соль. Сделано специально, чтобы не хотелось юзать дженерики. А err != nil специально, чтобы не хотелось обрабатывать ошибки
>>2218307 Ну, в целом это нужно для создания энумов, иногда полезно указать, что у нас не просто стринг или инт, а что это какой-то конкретный флаг или ключ, в общем случае тип у которого лимитированное количество валидных значений, как например syscall.Signal или syscall.Errno
Извиняюсь, за скорее всего платиновый вопрос: за полгода можно норм выучиться на джуна, чтобы устроиться? Они вообще нужны? Есть сейчас полгода работы на питоне с асинхронщиной, до этого было совсем чутка java\spring. Просто небольшой анализ вакансий — дохуя лет разработки до и свитч на го или же вообще ничего толком не написано. Поэтому и интересно, когда через полгода буду знать базу, то смогу устроиться куда-нибудь go-джуном?
на го джуны практически не нужны сам язык простой, но его используют, когда сложность систем уже высока работай на питончике, пока не почувствуешь себя крепким миддлом, параллельно попробуй втащить на работе какой-нибудь сервис на го, а потом дуй к нам на x2
>>2219196 А мне наоборот пришлось откатиться до богомерзкой джанги, так как платят больше на 50-80к чем на прошлом месте где писал на го сервисы с относительно низкоуровневным сетевым взаимодействием. Однако как мне кажется зря я это сделал, так как стал дико выгорать из-за того что мне это совсем не интересно, ощущение как будто отправили назад учиться в начальную школу лол.
>>2219643 Женерики миф, гугл скорее выкинет го нахуй когда его поддержка станет нецелесообразной и сделает что-то новое хайповое, как они это делали уже ни раз.
>>2220803 Все таки кобол не за один день выкинули, а вспомни как флеш мучительно умирал, пердел кашлял, но его до последнего порносайты и казино использовали, пока не исчезли браузеры с ним.
>>2220803 Немного написано. Когда писали на коболе, айти индустрия была на порядки меньше. Но на коболе написаны некоторые критически важные системы, поэтому он жив и вероятно переживет зумеров.
>>2221060 Да регуляркой заменить "fizz"\s∗: на "buzz": и не ебать мозг. У вложенных жысонов внутри строк кавычки будут экранированы, так что должно быть правильно. Хуйня задача. Лучше будет смержить два жысона произвольного формата, вот там пиздец, да. Нужно json.RawMessage парсить в map[string]interface{} и дальше рекурсивно спускаться. Енджой ер статик типизейшн, епта.
>>2221140 Тащемта да. Причем если это будет уже не JSON, а XML то вообще ебать цирк с конями начнется. Дефолтные encoding/xxx либы вообще по-уебански как-то сделаны с этим маршалингом непосредственно в гошные структуры. Для простых случаев может норм, но когда надо с документами вытворять всякое, то случается пук.
>>2221060 >>2221140 >>2221159 А кто-то действительно пишет на говне что-то кроме веб-морд и прочего сетевого говна? Он же совсем невыразителен для чего то кроме этого, не дай бог на нем бизнес-логику писать
>>2221165 У нас так его взяли для бэка, ведь хайпово, молодежно, быстро и надежно, и вообще бэк только хатэтэпе-методы дергает, а оказалось что таки да, надо ещё кое-какую бизнес-логику там крутить.
>>2221160 Условие перечитай, дебик. > поля объектов с именем "fizz" будут называться "buzz" Поля с именем, а не значения полей, содержащих подстроку. >>2221162 Ну вот я тебе получше задачу дал, более практическую: смержить два жысона. Типа {"foo":{"bar":1}} ⨁ {"foo":{"baz":2}} ≡ {"foo":{"bar":1,"baz":2}} На любом языке с статической типизацией это боль подобное реализовывать.
>>2221193 > Нужно json.RawMessage парсить в map[string]interface{} и дальше рекурсивно спускаться.
Тут надо делать структуры, в которые раскладываются разобранные жсонины, по типу как DOM для XML, и делать функцию для слияния, которая из двух таких создает третью. Обычный map[string]interface{} например будет проебывать порядок полей.
>>2221246 > Обычный map[string]interface{} например будет проебывать порядок полей. > An object is an unordered set of name/value pairs. https://www.json.org/json-en.html Че?
>>2221272 Знаешь, жсонины иногда читают люди, а иногда даже суют из в diff. И тут ты такой: а срать мне на ваш порядок полей, в спеке не написано, щас всё перемешаю к хуям собачьим и хавайте что дали.
>>2221282 Да как бы далеко не всегда. Чаще всего в них самые обычные бизнес-данные типа профайлов пользователей. Так-то похуй, в каком порядке поля, но если вдруг надо будет продиффать два таких документа, то лучше чтобы порядок имелся.
>>2221287 Ну вот когда диффать потребуется, тогда на лету и канонизируешь через jq --sort-keys, а до этого нехуй требовать выдуманную из пизды дополнительную структуру, спекой не предусмотренную.
>>2221306 Вот вам наше джейсон апи. Требования к клиенту: он должен быть написан на жс или другом языке для даунов, где объекты по спеке не итерируемы но фактически соблюдается порядок ключей при сериализации в ждейсон...
>>2221306 Лексиграфически, епта. Спека не устанавливает порядок полей, поэтому сериализовать можно как угодно. Строго говоря, это всего лишь костыль имеено что для наколеночного диффа, т.к. для каноникализации этого недостаточно, нужно иначе убирать половину флоатов и все эскейп последовательности, кроме кавычек.
>>2221662 Вот это плюсую. Две пагубные тенденции имеют место быть Чтобы все языки были похожи 1 в 1 Быть программистом язык нейм, а не просто быть программистом.
>>2221662 Жаба старая, котлин не нужен (фичи котлина переносят в jdk, а теперь еще loom в превью), шарпы забивают на обратную совместимость и закрыли себе дорогу в энтерпрайз (кроме Windows-house компаний), тайпскрипт это попытка мелкомягких подмять под себя js хипстеров(EEE). Го единственный современный язык, который массово принял бизнес и инвестирует в него ресурсы
>>2221867 >Го единственный современный язык, который массово принял бизнес и инвестирует в него ресурсы
В последние годы Го развивается с той же скоростью, что и жаба в период с 6 по 8 версии, то есть почти никак. Так что не знаю, какая тут современность. Вот если дженерики будут вменяемые, то уже да, значительный шаг вперед.
>>2221867 >Жаба старая Тем не менее на ней очень много всего пишется, да и в чем старость? Стримы есть, лум наверняка будет к следующему LTS или через один LTS, для всякой энтерпрайзной еботни вроде банков, финтехов, ритейла, где куча бизнес-логики и нужна поддержка десятилетиями, это отличный вариант, как ни крути.
>>2221896 Нет. Челы делятся на тех кто развивается и тех кто остановился в развитии. Раньше например среди пыхарей было много CMS простофиль, времена меняются, теперь полно непробиваемых laravel + vuejs кулибиных. Их попроси сделать сервис конвертации видео, они начнут его делать на пхп очередях просто потому что они встроены в ларавел.
А здесь вакансии можно писать? Ищу себе в команду аутистов в области edtech 2 мидл+ гоферов, можно в офис мск/питер, можно чистая удаленка, новенький макбук, дмс, полный список уже обычных для всех компаний плюшек. вилка 200-400, в зависимости от левела, для рокстаров - обсудим отдельно
если интересно - пишите на Anon717@protonmail.com я вас перенаправлю на херочек, которые проведут по процессу найма а то они блин деревьев в лесу сами не найдут
>>2221060 Примерно одинаково на всех языках будет написано. В го можно смапить json'ину в map[string]interface{} и рекурсивно пройтись по всему этому говну с коллбеком `func (obj interface{})`, где можно поменять исходную мапу. Работать будет в целом нормально, пока json не раздуется до тех размеров, когда придется потоковый процессинг писать.
как менять стек, если гандоны с hh пишут про опыт ПЩ не меньше года. Понятно что для некоторых это не очень принципиально, но тем не менее. Мне что сражаться за место с вчерашними студентами имея опыт коммерческой разработки в несколько лет? Хочу в начале след года ( до весны) сменить стек, сейчас вот начал к ГОвну присматриваться
>>2225015 в резюме у тебя что написано то, что работал у Кабан Кабаныча на ГОвне? нет ведь хотя я тоже могу скромно написать что просто бэкэндером провеслал 2 года
Как гошный GC трейсит через нетипизированные указатели (unsafe.Pointer). Например, есть unsafe.Pointer на структуру, в которой тоже есть указатели. Как GC их определяет?
>>2226150 Не мог бы ты раскрыть? Ты хочешь сказать, что для них в рантайме отслеживается тип того, на что они указывают? Насколько я знаю, размер unsafe.Pointer - честный один указатель и объекты в Го не имеют префикса с указателем на RTTI (как в Java/C++). Как же это тогда работает?
>>2224898 Мне кажется, в этом плане ПЩ сейчас, наоборот, самый дружелюбный к перекатывальщикам. Если в резюме не хватает баззвордов, можно вспомнить всё говно, с которым ты работал, не зависящее от языка (Я кэп, да).
>>2226608 Вкатиться реально, и даже легче чем в js/питон, т.к. говнокурсов по го не так и много и он не так популярен среди вайтишников, а компаниям нужны ждуны
>>2226143 Не читал особо код рантайма, может там что-то по другому работает, чем для обычных кодеров (хотя я сомневаюсь), но в общем случае с unsafe.Pointer'ом мало что полезного можно сделать. Но если мы точно знаем что это поинтер на интерфес (например пустой) - из него мы можем получить реальный тип
Джунов туда не берут, сеньор на других языках будет получать больше (ибо куча опыта обнулится ради хуй знает чего), вот и остается куче дурачков, которые не смогли на своем исходном стеке быть успешными, конвертиться в GOвноедов, сражающихся на арене ради 200к пример есть даже в рашке - см. озон где полтысячи говноедов работают за такую зепе над обосанным магазином резиновых тапок, зато на GO ПИШУТ
В общем, если вы посредственность - отличный язык, всем остальным не рекомендую.
>>2227795 Java - это карьерный выбор хуевого мыдла.
Джунов туда не берут, сеньор на других языках будет получать больше (ибо куча опыта обнулится ради хуй знает чего), вот и остается куче дурачков, которые не смогли на своем исходном стеке быть успешными, конвертиться в Javaдебилов, сражающихся на арене ради 200к пример есть даже в рашке - см. озон где полтысячи Javaдебилов работают за такую зепе над обосанным магазином резиновых тапок, зато на JAVE ПИШУТ
В общем, если вы посредственность - отличный язык, всем остальным не рекомендую.
>>2227795 Java-петух пригорел У гоферов ЗП на уровне джавы, пыхи джээсы и питоны оплачиваются ниже. Пиздуй поддерживать абстрактное легаси говно в говнобанке, раб
Почему если кто-то пишет плохое про Го, то это обязательно джавист? Я, конечно, знаю джавистов, которым не нравится Го (в их числе есть те, кто даже писал в проде на Го), но ведь всяких сишарперов, а тем более питухонеров и пыхеров Го должен волновать сильнее.
>>2228018 ну вот в январе начну бегать по собесикам, сейчас гошечу пока подтяну скажи гит свой( если есть)показывал кому нибудь на этих 3 собесах? и просили ли тебя ин риал тайм решать задачу
>>2228021 > сейчас гошечу пока подтяну Обрати внимание на асинхронность, и работу со встроенными типами, в т.ч. что происходит при работе с нулевыми значениями разных типов > скажи гит свой( если есть)показывал кому нибудь на этих 3 собесах? Указан в резюме, но там на го ничего не было, да и на других языках там хелоуворолды разного уровня встратости. Но да, 2-х летней давности. > и просили ли тебя ин риал тайм решать задачу Почти на всех собесах давали небольшое тестовое задание уровня CRUD сервис запилить. На одном из собесов дали 10 снипитов уровня https://habr.com/ru/company/vk/blog/314804/ и спрашивали что выведет, но нигде прям лайфкодинга не было
Ну и что с этим Govnom делать? Три стажерские вакансии на всю Москву? И куда эти вкатуны с курсов идут? Я вот студент и в принципе не могу вкатиться в этот чудный язык, так как в Яндексе у меня уже бан на полгода, в озоне нужно 40 часов батрачить, а в wildberries меня просто игнорят, лол.
>>2230614 >>2231133 Двощую, сам перекатываюсь из жабы в Го, так как в жабу меня тупо не взяли. Отсылал резюме в 200 контор, откликнулись 15, из которых на собес меня пригласили 11. Все собесы завалил. Теперь учу новый стек.
>>2231359 Потому что ещё нет такого количества разрабов на го, а у крупных организаций нет ресурсов на замену жабошарпоблядей гоферами, вот и приходится писать на том, что все знают.
>>2231144 >>2231174 да просто. хр ищет по ключевым словам и шлёт на техсобес, а там скучающие "техлиды" доёбываются до всякой хуйни, которую вчера в гугле вычитали мимокрок
>>2230892 > В каких случаях нужно использовать буферизованный канал В общем случае - когда ты хочешь делать select+send/receive с дефолтом, чтобы не зависать на этой операции, если на другом конце слоупочат. Воспринимай этот тип канала как внешнюю очередь сообщений. >в каких не буферизованный канал Во всех остальных случаях, т.е. когда нужно синхронное взаимодействие по аналогии с http-запросом > Как подобрать размер буфера? В большинстве случаев это либо 1, либо по количеству горутин, которые могут туда записать сообщение, это может быть удобно, когда нам нужно получить только самый первый результат или самую первую ошибку (т.е. мы читаем из канала только один раз), но при этом не создав утечку горутин. Бывают еще экзотические варианты, вроде вебсокет-чатов, где имеет смысл брать большие буферы под каналы для отправки контента конкретному пользователю, но там значения подбираются экспериментально, обмазывайтесь логами и мониторингом.
Джава не мертва, но популярность JVM платформы постепенно падает, особенно для новых проектов. Это связано не с тем, что джава хуевый язык или платформа говно, а потому что сейчас все становится cloud native. Нужно уметь быстро запускать небольшие сервисы, а не ждать по 3 часа, пока спринг фреймворк будет делать свою подготовительную магию. Решением был бы quarkus/micronaut вместе с graalvm, только вот проблема в том, что со спринга очень тяжко перейти на новый фреймворк. По сути большая часть джава проектов намертво увязла в спринге, который годится для классических старых серверов с виртуалками, расположенных где-то в датацентре банка, а не для сервисов, крутящихся где-то там в амазоне.
>>2232094 > что со спринга очень тяжко перейти на новый фреймворк Поэтому надо всё выбрасывать и писать с нуля на другом языке языке без инфраструктуры.
>>2232103 Так никто не выбрасывает спринг и джаву в частности. Что уже написано на них - дальше поддерживается. Однако с новыми проектами уже не все так очевидно.
Другой вопрос, сколько вообще новых проектов пилится в индустрии. Существует мнение, что основные прорывные проекты по части инфраструктуры уже написаны, и остаются только круды и поддержка уже существующего легаси.
>>2232112 Да еще где-то полгода назад работы было меньше, сейчас даже в таких концентраторах джавистов вроде сбера и тинька появилось довольно много голанг вакансий.
>>2232094 > Это связано не с тем, что джава хуевый язык или платформа говно Нет, связано. Страшно подумать сколько они денег потратили в GC, а всё-таки с аллокациями на стеке это никогда не сравниться. Да и платформа является ненужной абстракцией, в реальности никому не нужно использовать один и тот же билд на железе разной архитектуры ну, кроме как в разработке под андроид
>>2232228 > что тут происходит По одной структуре не могу наверняка сказать, но думаю что говнокод. > Как это можно использовать? Создаешь в замыкании подключение, потом опять же в замыкании суешь реализации этих функций в структуру, а затем возвращаешь структуру. Профитов никаких, кроме того что используешь "функциональные" подходы вместо ООП. Вангую написано каким-то студентом с JS-ом головного мозга
>>2232187 Всякие фреймворки для бигдаты, распределенных систем и клауда. Тот же zookeeper, hadoop, cassandra, spark, elastic, стек нетфликса - все это требовало огромных вложений как денег, так и людских ресурсов. Сейчас уже основной стек технологий написан, и остается только его поддержка, которой может любой индус заниматься, а не только дяди с пхд по распределенным системам.
Как же душно написаны статьи, особенно русские, просто пиздец. Человек сеньор-goвножор пишет базовые примеры, которые сам бы никогда не писал. Лезешь в репы и глаза на затылок лезут. Почему про реальные программы никто не пишет? Я к примеру, до сих пор не понимаю где лучше хранить url для запросов к другим апи - в самом коде или каком-то отдельном файле. Писать отдельные методы для каждого запроса или просто подгрузить конфиг из какого-нибудь json, один хер эти запросы не меняются кроме пары ключей. Ничего этого нет. 90% статей в айти - как написать хеловорлд.
>>2232337 да вот взял отпуск на декабрь, посижу нг выходные и пойду по собесикам бегать в поисках своей сотыги! а там глядишь и сбегу от своего кабана к другому но уже на ГОвне
Сто значит микросервисы? Если, к примеру, просто разделить проект на более мелкие, которые общаются между собой вебхуками, это считается за микросервис? Или там обязательно должен использоваться grps, протофацлв и пр?
>>2232275 >zookeeper, hadoop, cassandra, spark, elastic Это всё инфраструктура и никогда обычными бэкенд-девами не писалось. То, что это всё написано на Джаве, еще не значит, что ковырятели Спринга имеют к этому отношение.
>>2232624 >Если, к примеру, просто разделить проект на более мелкие, которые общаются между собой вебхуками, это считается за микросервис? Если различия только в этом, то это распределенный монолит, микросервисы должны быть потенциально независимы друг от друга, в том числе и в плане масштабирования
>>2232531 В большинстве случаев нихуя, но иногда в этом свои приколы, тут от компании зависит и от того что пилится и как. Где-то это всё хуйня, Миша, давай по новой и так каждый спринт, жизнь в вечной переделке. Где-то должны обосраться но успеть всё в спринт и похуй что у тебя жена рожает, Сычёв. Где-то это как в книжке написано плиннинг в начале, ретро и демо в конце, промежуточные синки, дейлики, 1+1, разноцветные стикеры миро, 2 часа обсуждать сколько сторипоинтов будет перекрасить синюю кнопку в зелёную и прочая залупа, а в перерывах между созвонами в зуме пилишь хоть какой-то код. Где-то это упирается в то что хуй чего по быстрому сделаешь в команде, у Ололоева на этот спринт задачи есть, а то что тебе сейчас нужно будет заложено в следующий спринт через 2 недели.
>>2232707 Ну, они вполне независимы, со своими бд. Просто для того чтоб работал один сервис, должна приходить информация от другого. К примеру, один считывает данные с сайта и отправляет его в пользование другим сервисам, которые выкладывают её каждый на своём сайте. Или это должны быть вообще несвязанные между собой вещи? Так это совсем разные проекты получается, а не микросервисная архитектура, если они каким-то образом должны работать, если отвалилась основная.
>>2232692 А на чем еще писать, кроме как на жабе в те времена? Из ООП языков только она была достаточно простой, чтобы избежать кучи ошибок, и кроссплатформенной. Сейчас на С++ стало чуть легче пользоваться, поэтому возможно на них будут писать дальнейшие инфраструктурные проекты.
А так, даже сейчас тяжело предложить иные альтернативы жабы в таких проектах. Написать на Го hadoop или elastic имхо будет тяжело. Хотя тот же Zinc как замена эластика уже существует.
Насколько хорош подход в Го, где на каждом проекте пилят свой велосипед? Из плюсов могу выделить, что это может быть просто интересно, с нуля собирать свою инфраструктуру под проект. С другой стороны, когда ты увольняешься и приходишь на другую работу, то там уже стек технологий будет отличаться. И что тогда?
Почему до сих пор нет единого фреймворка вроде laravel/django/flask/asp.net/spring?
>>2232991 >Почему до сих пор нет единого фреймворка вроде laravel/django/flask/asp.net/spring? Это придумано для людей с низкими умственными способностями, которые будут работать за копейки винтиком в системе >С другой стороны, когда ты увольняешься и приходишь на другую работу, то там уже стек технологий будет отличаться. И что тогда? Будешь расти как программист-инженер, а не останешься макакой одного фреймворка
>>2232995 >Будешь расти как программист-инженер Но ведь разве не инженер собирает проект из уже готовых частей?
>>2232995 >не останешься макакой одного фреймворка Ну, справедливости ради, стек технологий так или иначе меняется от проекта к проекту, но основной фреймворк остается. Другое дело, что ковыряние в криво написанном велосипеде не факт, что даст полезный опыт. А если ты джун/стажер, то придя на проект с таким велосипедом, потом перейти на другое место работы будет просто тяжело. Или нет?
>>2232991 >Почему до сих пор нет единого фреймворка вроде laravel/django/flask/asp.net/spring? Мне кажется не хватает гибкости языка, например без тех же дженериков много чего уже не сделать, плюс ещё в го нет макросов, аннотаций, наследования и сделать какой-нибудь фреймворк в таких условиях довольно сложно. Поглядим когда дженерики завезут.
>>2232991 > Почему до сих пор нет единого фреймворка По тому что в отличии от того же питона и js-а в го стандартный сервер вполне юзабельный, для нашего прода его вполне хватило.
>>2233030 > нет аннотаций Есть теги полей структур > наследования Есть встраивание Внезапно этого набора вполне хватает, чтобы написать тот же GORM. А дженерики единственное что изменят - для пользователя это будет чуть-чуть удобнее, т.к. тогда вместо пустых интерфейсов будут конкретные типы но под капотом всё равно будет тонна рефлексии
Проблема голанга в скудном наборе удобных библиотек для выполнения тривиальных задач. Куда уж там до фреймворков. Приходится всю структуру расписывать заново. Одна из причин почему в го нет вакансий для джунов, которые банально не в курсе как всё должно выглядеть в производственном коде. В итоге все проекты на го - велосипеды разной степени паршивости. Казалось бы, язык позиционируется для ускоренной разработки, но на практике всё с точностью до наоборот. Прежде чем писать на го, надо убить пару месяцев на создание собственных библиотек. Это типа круто, позволит расти и так далее. Ну напишите тогда на брейнфаке сервер, это же позволит вам вырасти ещё лучше.
>>2233296 Почти в любой серьезной конторе есть свои фреймворки и обвязки типо консьюмеров/продюсеров, rpc, клиентов для взаимодействия с другими сервисами. И это не зависит от языка.
>>2232228 если внутри тестов, то похоже на мок. еще может быть конфигом для настройки хуков, но по названию не похоже. еще мб они там динамически эти функции меняют зачем-то
>>2233418 >Идешь в другую контору - становишься джуном. Если ты макака которая нихуя не соображает то да, весь бэк примерно одинаковый. Основная сложность это предметная область и общее понимание как работает система, а не инструменты с помощью которых выполняются задачи.
Как будут работать два инстанса одного микросервиса? Допустим, есть инстанс, который делает запросы на сторонее апи, но он оказался нагруженным и появилась необходимость создать ещё один. Как в этом случае они будут работать?
>>2233535 >Ну, если у тебя есть время каждый проект писать с нуля Что ты несешь поехавший, причем тут писать проект с 0 и общие библиотеки и фрейморки всей компании?
>>2233616 Ну мы коннектимся к grpc серверу по адресу и порту. Как запустить ещё один инстанс микросервиса чтоб к нему бвл доступ на этот же порт и адрес? Или в докере мы запускаем несколько инстансов и он каким-то образом будет их выводить на один порт? Просто пишут, что микросервисы хороши тем, что если не хватает ресурсов, можно просто запустить ещё один инстанс и не париться. Как это работает не совсем понимаю
>>2233675 Внутри докера крутится DNS сервер, который переводит доменные имена в айпишники. Если у тебя несколько инстансов сервиса с одним именем, он будет делать round robin между инстансами. Можно извратиться и сделать куда более замороченнее и эффективнее, но по умолчанию балансировка идет на уровне DNS.
Перекатываюсь с ноды Кто нибудь обьяснит мне, как писать на ЭТОМ. Именно всякие common best practices. Смотришь код приложений, каждое - абсолютно уникальное блять со своими непонятными на первый взгляд велосипедами. Или же это хелловорд и хуй поймешь как это дальше разрастаться будет. Как структурировать приложение (и че за internal)? Допустим, я хочу связать graphql и postgres, и чтобы схемы красиво генерились, и чтобы говнокода мало было, и миграции работали. Как это сделать?
Можно ли начинат свой вкат вайти с go? Скоро третий курс, специализация и практики т.д., а я уже успел все поверхностно потыкать из самого популярного на бэк; жабаскрипт, питон, пыха, и мне ничего из этого не нравится. Не хочу иметь дело с этими языками на проф. уровне. Так вот, можно ли без опыта сразу начать работать на го?
Кто подавался на стажировку в Wildberries? Что там реально спрашивают? Попускают алгоритмами, как в яндексе, или гоняют по кишкам гоуленга?
Еще у них сайт с вакансиями максимально всратый, мало того, что информация не очень хорошо структурирована, так еще и рекламу какого-то говна предлагают смотреть.
>>2235395 Ебать самодур, сам же не обозначил чёткие границы ответственности между командами, сам же и страдает потом. Да и общение как с грузчиками, работать в этой хуйне себя не уважать
>>2235517 > The reason ?: is absent from Go is that the language's designers had seen the operation used too often to create impenetrably complex expressions. The if-else form, although longer, is unquestionably clearer. A language needs only one conditional control flow construct. Виноваты говнокодеры, а отдуваться языку. Пиша на Го, ты похож не на свободного человека, а на овоща в подгузнике и смирительной рубашке в комнате с мягкими стенами
Аноны, вот я вкатываюсь с нуля. Интересна мне именно веб-разработка. Различные стартапы и веб-сервисы.
Правильно ли я думаю, что если начну с go, то голова не будет забита корявыми практиками из js, nodejs и php? И что это лучший язык для вката в веб, судя по его производительности и тому, как все его хвалят?
Лично мне он ооочень интересен, меня, как перфекциониста, привлекла его концепция и подход.
>>2235783 Тут фишка не в тупости разработчика, а в доступности для бизнеса. Можно взять разработчика из любого языка с любым уровнем и через неделю он уже сможет что-то писать, ему не нужно будет постигать азы синтаксического сахара годами и он сможет легко читать чужой код, это хорошо работает для бизнеса, позволяет быстро и без особой боли найти разработчиков на проект и быстро что-то выкатить. Но да писать на нем больно, особенно обработка ошибок лютый пиздец
>>2235556 > Различные стартапы Там очень важна скорость разработки, нужны жирные и многофункциональные фреймворики, ORMы, а так же большое количество дешевых джунов с рынка труда. У го по всем этим пунктам не очень: скорость разработки, конечно, выше, чем у языков без GC, но немного ниже, чем у популярных в вебе языков, фреймворки и ORMы в го, конечно, есть, но их не принято использовать, да и ебаться в пустые интерфесы тоже то еще удовольствие, по этому писать сырой SQL считается тут нормой, да и джунов на рынке на одну вакансию на порядок меньше чем на жыэс или питон. Будь я CTO в стартапе - у меня на go были бы только k8s операторы, а всё остальное скорее всего на Nestjs + TypeORM + PostgreSQL, просто по тому что решает большинство задач.
> Правильно ли я думаю, что если начну с go, то голова не будет забита корявыми практиками из js, nodejs и php? Говнокод есть в любом языке, язык сам по себе не сделает тебя говнокодером. Другой вопрос, что в каждом языке есть свои особенности, которые тебе нужно будет учитывать и уметь обходить. Например в js-е это неявный каст типов, в питоне в случае асинхронного кода следить за тем, чтобы не было синхронного io в зависимостях и так далее.
> И что это лучший язык для вката в веб Го, как любой другой язык - это просто инструмент. Прикладные задачи, типичные для бекенда, (читай - CRUD) на го писать можно, но сложнее чем на более популярных языках, а значит более дорого для бизнеса. А те вещи, в которых го хорош, вроде удобной работы с асинхронностью или стримами (сравните https://nodejs.org/api/stream.html и https://pkg.go.dev/io) - это далеко от ежедневной работы обычного бекендера. Вроде на бекенде есть где развернуться с асинхронностью, но на практике кроме errgroup почти никогда ничего не нужно, т.е. по факту это тот же asyncio.gather или Promise.all
> И что это лучший язык для вката в веб Из плюсов - относительно маленькая конкуренция на рынке труда и зп чуть выше чем на других языках Из минусов - относительно маленькое количество вакансий, особенно ждуновских
> судя по его производительности Производительность нужна только крупным дядям, вроде банков, яндексов и озонов, только они могут почувствовать разницу с той же нодой.
> и тому, как все его хвалят Разве что девопсы, им он действительно зашел как замена баша+питона.
> Лично мне он ооочень интересен, меня, как перфекциониста, привлекла его концепция и подход. Ну тогда успехов во вкате, что я могу сказать. Ну и да, единственный способ научиться программировать - это программировать, по этому очень рекомендую написать форум/борду/блог, используя стандартные net/http и database/sql пакеты, без этого я бы не шел на собеседования. Если не получиться вкатиться с го - рекомендую тайпскрипт
Не знаком с Go, но понадобилось собрать одно приложение, работающее чисто с сетью. Оно тихо игнорирует запросы, по всей видимости, из-за несовпадения структуры с ожидаемой, никакого логгирования автор не предусмотрел. Есть ли менее ебанутый способ дебага, чем раскидывать принты в каждом if err != nil блоке, а совсем в идеале, собрать чтобы печатало трейс в реальном времени?
Q all! Стоит задача переписать скрипт с питона на что-то такое, чтобы юзер просто нажимал на ехе и все работало. Кроме excelize есть иные библиотеки для работы с Excel? Как в Го ищут нужные библиотеки? В чем разница между go get repo и если просто в импорте прописывать? Сорян за нубские вопросы, если чо.
>>2235362 на стажировку был тестик вопросов из 20 вроде того как расшифровывается хттп с вариантами ответа, несколько по базовому синтаксису гошки вроде что выведет программа, пара вопросов вроде напишите физбазз (неиронично) на языке на выбор, потом беседа с интервьюером, который смотрит твой тестик и мб спросит из чего состоит слайс и что-нибудь вроде напишите селект запрос с хевингом. саму гошку в принципе знать необязательно было, я тур оф го только прошел и проебался на нескольких вопросах в тесте по гошке. ну меня в итоге эта контора пидарасов в 2020м на хуе прокрутила, когда движуха была конечно, но я с годиком опыта с повышением зп переустроился, так что вообще не жалко.
>>2237029 У го немного другая сфера применения. > Как по вакансиям? Сильно зависит от предметной области. На девопс много, на остальное - сильно меньше.
>>2240118 Осталось ещё выпилить var, имена переменных писать после типов, впилить эксепшены, классы, аннотации, сделать неиспользуемые импорты и переменные варнингами, впилить вменяемые тулзы для сборки и менеджер пакетов.
>>2240072 Не знаю кто эти гоферы, но разработчики языка никогда не говорили что они не нужны. Они только говорили, что есть проблемы, связанные с имплементацией дженериков, и придется чем-то пожертвовать, или размером бинаря и скоростью билда или скоростью в рантайме. Надеюсь выбрали первое
>>2240165 >2020 К этому моменту они уже заебались слышать о необходимости дженериков. До введения в черновики стабильно кричали нинужна и ссылались на высеры пайка.
>>2240165 Картинка отвалилась >>2240173 Т.е. по твоему гугламисты в хорошем смысле это фанатики и адепты "ненужнасти", а не инженеры с огромным опытом?
>>2240178 >Т.е. по твоему гугламисты в хорошем смысле это фанатики и адепты "ненужнасти", а не инженеры с огромным опытом?
Так они их и не собирались реализовывать до момента, когда на них начало комьюнити налегать. Если бы не этот опрос, то до сих пор бы они отодвигали решение на долгий срок, так как не считали это необходимым для нормальной разработки.
>>2240146 >менеджер пакетов Вот прям две вещи, которые я хочу - нормальный менеджер пакетов и более адекватный отлов ошибок. С остальным я готов мириться.
>>2240210 > Так они их и не собирались реализовывать до момента, когда на них начало комьюнити налегать. Ты пытаешься меня убедить, что человек, который имеет огромный опыт на плюсах и еще куче всего пишет эту хуйню и приговаривает "Как же хорошо, что нет дженериков, а то хуйня какая-то была бы". И при этом это не рандомный >>2240213 с двача, а рокстар, получающий 300к $ в наносекнду в гугле. Нет, я не поверю в это никогда.
>>2240327 >Ты пытаешься меня убедить, что человек, который имеет огромный опыт на плюсах и еще куче всего пишет эту хуйню и приговаривает "Как же хорошо, что нет дженериков, а то хуйня какая-то была бы" Эти люди сделали уебищную систему прокидывания ошибок и всратейший пакетный менеджер, который выглядит более всрато, чем установка *-dev пакетов в пользовательское окружение, а дженерики добавили только когда их активно начало пинать комьюнити. Причем они не придумали ничего лучше, чем сделать квадратные скобки в текущей реализации, хотя такое решение можно было и в нулевых запилить.
Бля, как учиться то. Прошел го тур, разобрался вроде с базовой хуйней, полез смотреть в ютубе как собирают простейший веб сервер. И началось нахуй. Куча говна, какие то бест практис, чистые архитектуры. Я просто там нихуя не понимаю
>>2240448 > а дженерики добавили только когда их активно начало пинать комьюнити Новую методичку подвезли? Сколько раз ты планируешь еще повторять эту мантру? ИТТ уже 2 раза
Никак не могу с горутинами разобраться. Нормально ли это писать в один канал с двух горутин? Если на пике горутины в разных потоках, то почему циклы последовательно выполняются, а не в перемешку?
>>2243375 Все равно нихуя не понял, но хотя бы вижу что две функции запустились в горутинах и работают одновременно Что вообще по каналам обычно передают серьезные ребята? Я туда пишу просто чтобы горутина не кончилась.
>>2243419 в го есть всегда 1 горутина это мэйн, горутина это функция которая запускается в отдельном(от потока мейна) потоке(горутине). Фича тут в том что когда ты не обьявляешь горутины, твой код выполняется последовательно. Если ты обьявил горутину то то код перестает быть последовательным, и можно вызывать следующие функции/операторы не дожидаясь работы вызванной горутины.
каналы(как пневматические трубы в офисе чтоб туда пеналы с документами отправлять) создали чтоб был механизм передачи данных между горуинами. в твоем первом пике на 16 строке твоя прога стоит ждет пока канал закроется и можно будет читать из нее, поэтому тебя сначала прокрутился цикол10 строка потом ты послал в канал ИНТ и основная горутина/поток видит это, считывает из канала ИНТ (правда в примере в никуда, такое бывает да), и только потом основной поток/горутина едет дальше.
ттакую синхронизацую надо делать чтоб основная горутина не закончилась пока не законччатся внутренние горутины, иначе будет горутин_ранниг_еррор.
есть еще каналы с более чем одним слотом для данных, их называют буферизированные, их вот удобно использовать когда у тебя с очередью данных скорость вырастет, нежели поштучно их посылать
вообще это лучше использовать когда тебе надо запускать например ГЕТ запрос по тыщю раз, и чтоб не ждать пока они последовательно выполнятся, каждую запустить в своей горутине, так у тебя будут гет запросы одновременно(почти), и ты не будешь сидеть ждать пока сервак к которому ты обращаешься готовит тебе жисончик ПОСЛЕДОВАТЕЛЬНО
вообще есть реальные потоки системы и процессы, и 1 поток системы != 1 горутина, это важно понять, гоха под капотом имеет менеджер горутин(которые крутит гоха) и потоков(которые дала система) и переключает горутины в потоки по какимто алгоритмам, если будешь крудошлепить то не парься даже.
>>2239521 на вскоде пишу, пробовал голанд, но часто колупаю баш скрипты, а в голанде с другими языками чет туго пиздец, но в вс коде надо настраивать настройки, потомучто искаропки там максимально уебищно все сделали наример на таб там 4 пробела вместо табуляции, модули/gopath вообще ебано настроены когда ставишь ГОаддон
>>2240884 Руна представляет собой один юникодный символ, который на практике может быть от 1 до 4 байт, в случае емодзи, например. Слайс рун занимает больше памяти чем стринга, т.к. utf-8 позволяет чуть-чуть экономить память и не выделять по 4 байта на каждый символ. При работе с юникодными строками учти, что при обращении по индексу стринга ты обращаешься не к символу с заданной позицией, а именно к байту, который как может быть целым символом в случае ASCII. так и куском любого другого символа. Не знаю что тебе еще сказать, ты лучше сам задавай конкретные вопросы.
Пацаны, помогите. У меня есть апи сервер, на котором нужно запускать дополнительные скрипты по шедулеру. Мне лучше наговнячить отдельные независимые скрипты и засунуть их в линуксовый кронтаб, или найти какую нибудь имплементацию крона в гохе, и хуярить их в основной программе? Как бы вы сделали? А то я нюфаг, и мне оба решения кажутся костыльными.
Если это наколенное поделие, которое ты не будешь долго сопровождать на многих инсталляциях, то делай в крон. Если нет, то я бы сделал свой отдельный планировщик
>>2246398 Я бы сделал k8s CronJob, если вы используете кубер, либо просто https://hub.docker.com/r/willfarrell/crontab + docker-compose если нет. CURRENT_YEAR всё-таки на дворе, нужно жить в контейнерах, а не на хосте.
И тут дело даже не в контейнерах ради контейнеров, а в том, чтобы иметь infrastructure as a code, чтобы потом при любых инфраструктурных манёврах не носиться по офису между разрабами и админами теряя кал, в попытках понять как оно работало до этого
Анон, привет Изучаю го и пилю небольший пет проектик, который состоит из двух частей: 1) Модуль, который умеет следить за определенными событиями и определять когда они наступили 2) Модуль-бот для телеги, через которого можно будет подписываться на эти события.
Была идея сделать их как 2 сервиса, что общаются между собой по grpc. Но сейчас кажется, что это плохая мысль: т.к. придется в каждом модуле делать и сервер, который принимает сообщения, и клиента, который их отправляет.
Имеет ли смысл так делать, или хуйней занимаюсь и так никто в здравом уме не делает?
>>2248478 > Но сейчас кажется, что это плохая мысль: т.к. придется в каждом модуле делать и сервер, который принимает сообщения, и клиента, который их отправляет. Там же кодогенерация > Имеет ли смысл так делать Да, но я бы не стал так делать со старта. Просто пиши код модулями так, чтобы в случае необходимости ты мог разделить его на 2 процесса. Ну и я бы на твоем месте тут добавил очередь с сохранением на диск, чтобы не проёбывать ивенты
>>2249370 Потому что функция main() вызывается, а f() - нет. Ты выбрал не тот язык для вката. В Go берут исключительно миддлов из других языков. Их и учи.
>>2249386 Не одинаковы. Функция с названием "main" - точка входа в программу, и при запуске вызывается сама. О вызове функций с названием "f" нет никаких соглашений, поэтому она и не вызывается, её можно вызвать только самому из функции main или какой-нибудь другой функции, которая вызывается из функции main.
Чёт подзаебало меня писать круды на ларке. Решил потыкать go. Что могу сказать сначала было сложно. Но уже норм, нраица, решаю задачки на лит коде . Особенно нравится строгая типизация, после пыхи прям кайф. Параллельно смотрю курс от mail.ru на курсере. Планирую заполнить пробелы в алгоритмах , докере и тестировании. На праздниках наверное запилю спа на вуе ток пока не определился гин брать или эхо. Но с работой беда, везде нужен опыт а где его брать хз
>>2252137 >а где его брать хз Ну как же, пишешь на пхп годик-другой, параллельно учишь Го, потом просишься в контору, которая переписывает свое помойное легаси с пхп на не менее помойные микросервисы на Го.
>>2252137 Придумай себе попыт, я не знаю. CRUDы в любом языке мало отличаются друг от друга. Можешь пет-проект сделать за пару вечеров чтобы проникнуться обработкой ошибок.
Бля, почему всё так сложно у вас нахуй. Нужно отправить пост запрос с вложенным жсоном, приходится создавать две структуры, вкладывать одну в другую, маршалить запрос, потом так же принимать ответом вложенный жсон, опять так же маршалить во вложенные структуры нахуй. Нет особо никаких других путей что ли?
>>2252746 Да кабану кто то внушил что го ахуенный для его мелкобизнеса, что хттп сервер искаробки там работает асинхронно и прочую ебалу, сижу вот уже вторую неделю все свое говно переписываю...
>>2194497 Ну я с пхп 1 год на битриксе работал и еще год на ларе, плюс запилил за месяц небольшой пет-проектик. Хватит на мидла? Хотя что спрашивать, лучше проверить по собесам.
Норм идти на собес просто из интереса? Устраиваться сейчас не собираюсь, чисто чтобы разведать обстановку и через полгодика уже пойти или не пойти. HR-ы, у вас бы пригорело от такой хуйни?
>>2255163 а ты уверен что даже с прибавкой 30-50% решишь не переходить? всегда можно сказать, что мало предложили и ты хочешь прокачаться и попробовать чуть позже.
В каком направлении стоит двигаться, если хочу научиться писать бэк на Go, но опыта написания сетевых (да и не только) приложений нет?
С основными структурами данных и какими-то базовыми алгоритмами типа бин. поиска я знаком, но ничего промышленного, кроме как уебищного андроид-приложения из говна и палок, я не делал (пару лет назад ходил в IT школу Самсунга, но разработка под Андроид мне не вкатила).
По синтаксису Go пробежался, немного алгоритмических задач, чтобы его закрепить, порешал, но опять же из-за отсутствия опыта промышленной разработки я не могу, как советовали чуть выше, просто придумать какое-то сетевое приложение и пойти сразу писать его, попутно пользуясь гуглом.
Материалов, рассказывающих с нуля, как взаимодействовать с серверами на Go я, увы, не нашел. Все, что я видел, скорее для людей, которые имели до этого опыт разработки и просто пересаживаются на Go с каким-никаким, но пониманием, как что работает. Есть ли какие-то пути лучше, чем изучать материалы, которые требуют непосредственного написания кода, с условным Питоном (его синтаксис мне знаком), а потом, когда +- буду осознавать, что к чему, пытаться делать все то же самое, но уже с помощью Голанга? Есть, конечно, мнения что, Go как первый язык учить - затея не из лучших, но долбиться с каким-нибудь плюсами/учить Питон не хочется: все-таки, судя по тому, что я почекал, стажерские/джуновские вакансии на Go в ДС существуют, и их не меньше, чем по другим ЯП, а язык кажется перспективным.
>>2255532 Напиши пару REST API. Гайдов особенно на ангельском языке более чем достаточно, gin поковыряй.
А так тебе правильно порекомендовали по поводу сетевого приложения. Если начнешь его делать познакомишься с авторизацией (JWT, как пример), БД (изучишь GORM) и так далее.
Плакать что материалов нет --- глупо, т.к. их более чем достаточно. На крайняк в гугле забей "Top pet projects Golang"
>>2255650 Вообще в первую очередь на русском искал, и может я, конечно, поисковиком не умею пользоваться, но условных лекций (как и литературы), где прям с самых основ рассказывают про какой-нибудь HTTP, а потом начинают, разжевывая, что-то писать серверное именно на Go не нашел.
Про REST API - спасибо, ознакомлюсь. Еще вопрос: с >>2165418 (OP) >- Емкий пошаговый гайд с азов до джуна (go tour на максималках): https://www.practical-go-lessons.com/ стоит ознакомиться? Там про HTTP, XML, JSON что-то есть, выглядит как то, что может пригодиться.
>>2255532 >стажерские/джуновские вакансии на Go в ДС существуют, и их не меньше, чем по другим ЯП, а язык кажется перспективным
Не, сильно меньше. Как минимум тот же яндекс нанимает кучу С++/Java стажеров. Сбер, тиньк, рсхб устраивают java/js стажировки для студентов. Не говоря уже о всяких галерах и интеграторах, которым нужны джуны и стажеры, которые будут разгребать самые помойные нудные таски, за которые никто не хочет браться.
Из известного мне, гошников к себе на стажировку берет вайлдбериз, озон (правда у них обязательно 40 часов в неделю работать) и яндекс (в очень малых количествах). А, ну еще и авито, правда хз набирают ли они стажеров, плюс там были довольно кабальные условия уровня работать год за 40к.
весь крупняк набирает стажеров/джунов, но туда серьезный отбор - только для крутых студентов/выпускников
с улицы туда не зайти
у меня племянник прошел отборы в тинькофскую школу финтех, рассказывал о задачах по математике и алгоритмам, прошел у них курс по го и сейчас вышел к ним джуном
>>2255806 Есть такое, чтобы попасть в тинькофф нужно уметь решать довольно нетривиальные задачи на динамическое программирование и графы. Да и в целом тинек сейчас позиционирует себя как банк-фаанг и зазывают всяких математиков-олимпиадников. Но там и стажировки раз в квартал стартуют, правда я за 6 попыток так и не смог даже до собеседования дойти, лол.
А вообще кроме как крупняк сейчас мало кто может содержать джунов и стажеров. Это считай как бесполезного сотрудника содержать у себя в течение полгода.
Вот, к слову, статистика тинька. Конкурс примерно по 50 человек на место. Удачи вкатиться, хуле.
https://vk.com/topic-123851409_48300564 Вот их задачи и решения, если что. Чтобы получить возможность пройти собеседования, нужно решить 4 задачи и желательно пятую частично.
>>2255532 Попробуй вкатиться в wildberries, контора все-таки более паршивая, может хоть туда конкурс поменьше будет. А так, если ты лоускилльный вкатун, ну то есть не умеешь решать сложные медиумы или харды с литкода (ДП, графы, жадные алгоритмы, всякие рабины-карпы и бойеры-муры для строк, какой-нибудь хитрый бинпоиск) за относительно короткое время, то сейчас только во всякие НИИ, заводы и госы нужно вкатываться, потому что в ДС, не задротя алгоритмы со школьных лет, ты только пососешь в крупных компаниях.
>>2255843 Для написания операторов или других приблуд для кубера - определенно да, но это уже больше ответственность девопсов. А для обычного бекенда это скорее "будет плюсом" и мало где реально нужно
>>2255837 А так везде, на любую стажерскую и джунскую вакансию за неделю прилетает по 300-600 откликов. Как ты будешь отсеивать кандидатов? Понятно, что всякие тестовые дают, контесты, а после еще собеседования по алгоритмам и кишочкам языка, но тем не менее.
Кстати, на хх сейчас примерно 15 вакансий джунов на голанг, попробуй еще вкатиться хоть куда-нибудь. Я вот весной прошлого года пытался вкатиться - так и не вкатился, вакансии, на которых мое резюме не отклонили, закончились быстрее, чем я смог получить хотя бы один оффер, вот и все.
>>2256572 Короткий ответ - нет, там более низкоуровневая unsafe-машинерия Рефлексия в го инкапсулирована в отдельный пакет, который рантайм го напрямую не импортирует. Вообще компилятор и рантайм почти не используют общедоступные пакеты, вместо этого они используют параллельные имплиементации из internal пакетов. Я так понимаю это из-за 1.х promise of compatibility, который связывает по рукам и ногам Встречный вопрос - а какая, в общем-то разница? Если ты упрешься в производительность type switch или type assertion тебе вообще и от интерфейсов нужно будет отказаться.
>>2257536 Ну и как ты это себе представляешь, писать в резюме "я на го только хелловорлды борду и интернет магазин писал, опыта нет, зато я мидл в языке x"? Так такое резюме на этапе хрюши в помойку отправится.
>>2257539 > Ну и как ты это себе представляешь, писать в резюме "я на го только хелловорлды борду и интернет магазин писал, опыта нет, зато я мидл в языке x"? Да. > Так такое резюме на этапе хрюши в помойку отправится. Нет.
>>2257539 Друг, я тебе, возможно, тайну открою, но джуна от миддла отличают не то, как они задрочили подводные камни конкретного языка, а опыт и знание подходов непосредственно к разработке ПО.
>>2256825 >Встречный вопрос - а какая, в общем-то разница? >>2257281 >>2257515 Меня не производительность беспокоит, я просто хотел разобраться в кишочках гоуленга...
>>2257533 Озон вроде бы раньше нанимал на Го людей из других стеков технологий без требований глубокого знания го.
>>2257547 >а хрюши понимают Ну даже если не понимают, какая от этого разница? Ты с пыхи перекатываешься или откуда? Если с пыхи или питона, то можно поискать вакансии, где требуют PHP/Golang или Python/Golang. Могут на такое взять и без коммерческого опыта в Go. Правда не факт, что на работе ты будешь разрабатывать модные молодежные микросервисы, могут заставить ковыряться вилкой в помойном легаси на пыхе.
>>2257559 > я просто хотел разобраться в кишочках гоуленга... На эту тему не много контента, лучший выбор это сколнировать репу голенга и читать код рантайма. https://go.dev/src/runtime/iface.go
Но для начала хватит понимания что вообще такое интерфейсное значение (структура с двумя поинтерами, один из которых на рантайм-данные о типе, которые как оказалась (см комментарий на скриншоте) - в нормальных условиях является синглтоном), чтобы понимать, что проверка конкретного типа у интерфейсного значения это относительно не дорогая операция (сравнение двух адресов, т.е. сравнение двух чисел)
>>2255532 тупо иди на собес в авито/вб/озон. если сольют, то проси фидбек. большой шанс, что если тебя сольют, то это будет не из-за хуевого знания гошки/микросервисов. я на похуй без опыта вкатился через стажерство в вайлдбериз, прошел только tour of go до собеса. в резюмехе были базовые знания петона, плюсов, sql и инженерная специальность по радиолокации. на своём опыте вообще не почувствовал никакую трудность вката, о которой тут пишут. потом эти ягодные пидары сократили, но в другую контору перейти с повышением ЗП уже было максимально просто. всю эту хуйню вроде взаимодействия с серверами и как писать рест апишки за первый месяц выучишь на 95%.
И, вообще, как такие проблемы в нормальной команде надо решать? Пример данных в базе на картинке. Произошло какое-то несоответсвие выдачи. Некто Кульпин отослал решать проблему в группе, которая пишет бэк. Виноват Кульпин?
>>2258598 Чабинский Паша из вб, не знал что-ли? По какой причине произошел такой диалог, не в курсе, но на дваче и не только это еще год назад обсуждали.
>>2258244 >но в другую контору перейти с повышением ЗП уже было максимально просто В РФ есть нормальные места, где пишут на го, за исключением авито/вб/озона? Нормальные - без кучи легаси, с нормальным руководством и без толп вкатунов с заводов на позициях сеньоров.
>>2257559 Дело не в производительности, просто вопрос странный сам по себе. Это примерно как спросить "пистолет Макарова под капотом АК-47 использует"?
>>2260239 Рефлексия - это такой удобный способ использования unsafe'а, когда вместо сигфолта ты получаешь паники. Приведение к конкретному типу это вообще про другое, хотя и использует под капотом unsafe, как и почти всё в рантайме
Есть такой странный проект tinygo. Кто-нибудь пробовал?
Так вот, если tinygo ради многопоточности вставляет в каждую строчку await, это все ебово проседает по сравнению с простейшим кодом на обычном ардунском си?
>>2261610 Дело в том что я еще не знаю что такое стандартные горутины. Мне нужно оценить перспективу в это ввязываться. Действительно ли после каждого оператора происходит неявный вызов кода?
Хотел попробовать обрабочик звука сделать.
выхода у меня два: писать на micropython с кусками кода на C Go, где интерфейсы с железяками плохо доделаны, но я могу рассчитывать, что производительность как Си потянет мое DSP.
При этом мне просто не нравится Си и все эти исторически сложившиеся таймеры в ембедеде.
>>2260617 Но ведь горутины с точки зрения разработки практически ничем от отличаются тредов - те же рейсы, те же дедлоки. Их отличие от обычных тредов больше в производительности, т.к. они являются абстракцией над тредпулом они получаются более легковесными, вот и всё. Отличительная особенность го это именно каналы как встроенный в язык тип => имеем дефакто стандартный способ общения горутин
Что произойдет, если вызвать в горутине продолжительную по времени операцию? Например чтение из большого файла или чтение из сокета, куда данные медленно поступают. Реальный системный поток так или иначе заблокируется, пока не будут считаны все данные, так? И что тогда делают остальные горутины? Ждут, пока занятая долгой операцией горутина закончит свою работу, после чего планировщик на этот поток ставит другую горутину? Разве будет от этого выигрыш в задачах, связанных с IO? Я думал всегда, что механизм какого-нибудь epoll в этом плане более производительный и удобный.
>>2263482 Я так понял, что блокирующий IO вызов в горутине просто отдается в netpoller, где как раз с помощью epoll/kqueue отслеживается состояние IO задачи. А в это время на поток, где ранее была горутина с блокирующим вызовом, помещается другая горутина. В целом умно, хуле скажешь. Другое дело, что если блокирующую задачу нельзя с помощью epoll/kqueue отслеживать, то пизда всему сущему - системный тред заблокируется, и с этим, похоже, что ничего не поделаешь.
Тогда другой вопрос. Вот эти все обращения к БД, они же через сокеты идут, а значит их можно в netpoll отдать и системный поток не будет блокироваться в ожидании результатов какого-нибудь селект запроса?
только хз, что происходит при синхронном сисколе. щас загуглил - все так, как ты пишешь, поток будет ждать. но память говорит, что мне попадалась инфа, что рантайм должен бы создать новый поток... может кто ссылками поможет.
>Тогда другой вопрос. Вот эти все обращения к БД, они же через сокеты идут, а значит их можно в netpoll отдать и системный поток не будет блокироваться в ожидании результатов какого-нибудь селект запроса?
в целом, зависит от драйвера но в подавляющем количестве случаев драйверы асинхронные, и блокировки не будет
>>2165418 (OP) >- Емкий пошаговый гайд с азов до джуна (go tour на максималках): https://www.practical-go-lessons.com/ ого, это что такое? говно какое-то или норм тема? насколько утверждение про джуна - фантазии ОПа-хуя? мне не для вката, а так, чисто просто интересно мимо
>>2165418 (OP) >пункт "Learning Go" Нет такого пункта. Вопрос, какая должна быть структура каталогов где писать код? Левые стайлгайды говорят, что нужно создать 10+ каталогов, в том числе cmd для бинарников, хотя для них автоматические создается каталог bin.
>>2165418 (OP) Давайте посмотрим кто из местных сеньюров сможет пройти собес на вкатухскую вакуху джуна говнолэнщика.
1. Чем отличается аутентификация и авторизация? 2. Какие есть модели контроля уровня доступа? 3. Дай определение и область применения SAML. Какие преимущества, недостатки и альтернативы? 4. Как ты понимаешь термин Non-Repudiation? 5. В чём заключается CAP теорема? 6. Опиши алгоритм работы равт протокола. 7. Зачем нужен кворум в распределёных системах? Какие преимущества и недостатки системы работающей без кворума? 8. Назови функции девопса в команде. 9. Чем отличаются end to end тесты от интеграционных? 10. Назови принципы SOLID. 11. Что такое "пахнущий" код? Опиши несколько примеров такого кода 12. Какие отличия sql от nosql баз данных? Когда стоит применять какие базы? 13. Назови ACID принципы. 14. Чем оптимистик лок отличается от писимистик лока? 15. Что такое мастер-слэйв (ридонли) реплика? Чем она отличается от эктив стэндбай реплики? 16. Опиши как работает хэндшейк в TCP. 17. Что такое nagle algorithm? 18. Как при сканировании отличить закрытый TCP порт от защищёного фаерволом? 19. В чём разница хтпп первой и второй версии? 20. Какие бывают атрибуты у кук? 21. Какой хейдер ставит вебсервер при проксировании запроса? 22. Опиши когда применяют post-mortem, ретроспективу и root cause analysis? 23. Для чего в гите blame, cherry pick и bisect? 24. В чём разница ручного, полуручного и автоматического пайплайна? Когда какой стоит использовать? 25. Чем отличается фабрика от абстрактной фабрики?
>>2267666 Там есть инструкция как локально развернуть, там был русек, но очень васянский - с КАРТОЙ вместо map хорошо хоть слайс не перевели как нарезку
>>2269389 Нихуя тебя не понял. >JSON разбирается Что это значит? Скинь пример на го плейграунд > независимо от регистра ключей? Ключей в json-объекте, го мапе, полях структуры? > Вам там делать нехуй? if thingsToDelat == nil { return nil, errors.New("da, nam norm") }
>>2269427 Что тебе не понятно? Берём любую программу на Go, работающую с JSON вида {"Hui":"pizda"} и страктом Hui. Начинаем ей кормить JSON вида {"Hui":"pizda","HUI":"anus"}. Программа берёт HUI несмотря на регистр и ебётся в anus. As expected?
>>2269671 > Ты даже пщ не осилил, куда тебе до джсона... В голос
>>2269594 Без твоего кода нельзя сказать точно, но ты, скорее всего, проебался на том, что не прочитал документацию по json пакету, где сказано, что чтобы маршалить го структуры в json объекты или анмаршалить наоборот - тебе нужно чтобы все интересующие тебя в этом плане поля были экспортируемыми, т.е. с большой буквы. по тому что пакет рефлексии, который пакет json использует для работы искусственно ограничивает работу с приватными полями. Если очень надо - юзай unsafe Если у тебя в json объекте ключи с маленькой буквы - тебе нужно использовать специальные struct tags. Как, например, тут https://go.dev/play/p/-wWcGgp4hbe Пройди, блядь, ебучий тур по го, он охуенный
Сусланы, вбросьте какой-нибудь годный таториал по вёрстке production grade CRUD'ов. Перекатываюсь сейчас с долгих лет фронтенда в джуниор Го. Кодать как — разобрался, делать нетривиальные рест сервисы — тоже. Но всё это учебные проекты. А как сделать буллет пруф продакшон грейд рест эйпиай энд сак сам дик чёт пока не разобрался. Может быть есть какой-то гайд что надо реализовать чтобы приложение было годным и его не стыдно было показывать на собесе прожжённым гоферам? Я пока на вскидку сделал всё чтобы 12 factor app'у соответствовать тяжело идёт обучение без ежедневного код ревью как привык, но не покидает ощущение что этого мало.
>To unmarshal JSON into a struct, Unmarshal matches incoming object keys to the keys used by Marshal (either the struct field name or its tag), preferring an exact match but also accepting a case-insensitive match. By default, object keys which don't have a corresponding struct field are ignored (see Decoder.DisallowUnknownFields for an alternative).
>>2269726 >буллет пруф продакшон грейд рест эйпиай в компаниях по-разному. где-то десятки пакетов по 30 строк кода и мемы про чистую архитектуру и DDD, где-то https://medium.com/@matryer/how-i-write-go-http-services-after-seven-years-37c208122831 все роуты в одном пакете и сотни строк в каждом пакете - норм. на джуна в обоих случаях должен пройти, если собеседующие не ебаны. если и ты, и собеседующие не ебаны, то у тебя вообще тестовых заданий быть не должно и в первые недели ты будешь поставлен на колени делать код как в остальных проектах команды. единственное что я блять увидел за 3 места работы это то что все имеют пакет с модельками названный models
Как вы смирились с тем, что для обозначения приватных членов используется запись имени с нижнего регистра? Это же хуже даже чем m_*, почему нельзя было добавить модификатор, как static из C или private из ООП языков? Зачем уродовать код? Использовать lowerCamelCase, когда во всем коде используется CamelCase. Вкусовщина, но я не понимаю.
>>2272106 В дополнение, как вы смирились с ограничением количества слов в названии пакетов до одного? Это же не дает вообще никакого понимания откуда этот пакет, что он делает, может быть вообще это другой пакет, а не который вы ожидаете. И вы это не поймете пока не посмотрите на импорт или на сам пакет.
>>2272106 >>2272108 И еще, вам серьезно нравится указывать в импортах ссылки на гитхаб? Почему в Go не завезли менеджер пакетов? Как у того же питона? Почему я не могу создавать проекты в любой директории, в которой хочу? Зачем мне нужен, GOPATH?
>>2272109 Не забывай обновлять методичку, ты за это деньги получаешь. С пакетами они разобрались, дженерики уже есть в бета-версии, скоро и эксепшены подвезут.
>>2272108 > как вы смирились с ограничением количества слов в названии пакетов до одного Это не ограничение, это скорее рекомендация. На практике там часто 2 и иногда даже 3. Даже в стандартной либе есть по два слова. Название пакета это название неймспейса, он не должен быть подробным описанием что это такое и для чего. > Это же не дает вообще никакого понимания откуда этот пакет Полный путь импорта более чем достаточно для понимания.
>>2272108 если уж нужно, то либо составное слово, либо аббревиатура. но внутри приложения обычно всё понятно. еще в серьезных компаниях автосгенерированный код может и с андерскорами в названии пакетов быть, поэтому в названиях самописных пакетов тоже их используют и не ебут мозги, хоть и неидеоматично. а для публичных либ не должно быть так уж трудно короткие названия придумать. если в твоей либе больше трех пакетов которые нужно импортить, то ты вообще пидор. >>2272106 неиронично одна из лучших фич. делал себе скрипт штобы сишарп в го переписывать так это ебота лишние кейворды приходится стрипать плюс нихуя не понятно какое дополнительное понимание они привносят, кейсинг хотя бы дополнительно виден в точке вызова
Блядь, какого хуя нету нормальной документации по Aerospike? Заебись у них тупа на спйте лежит страница с описание в духе «Метод получитьСписок - возвращает список», Примеров ноль, зато блядь поддержу pred exp выключили сука
Чет горит от этого GO... Девупс который ничего кроме баша, ямла, и немного груви не умеет в треде.
Пытаюсь вкатиться в ГО, так как хочется больше понимать в работе бекенда и при возможности писать свои костыли.
Возникает куча вопросов, по релокации памяти, пустым интерфейсам, алгоритмам итд итп. Думаю может есть какие-то репетиторы? менторы? Больно во всем этом разбираться самому. Не представляю как в ГО вкатываются с 0 самостоятельно.
>>2165418 (OP) Аноны экс-джависты, можете пояснить почему/зачем вы перекатились на го? Я сам вкатун в пхп и понимаю, что с него придется перекатываться, чтобы начать деньги зарабатывать. Но вам это зачем, чем жаба не устраивала, там же вроде норма платят? Или доебала "корпоративная" культура, или проекты унылые?
>>2276703 >доебала "корпоративная" культура, или проекты унылые И то, и другое. Ну и легаси конечно же. Сам подумай, в джаве ты только и делаешь, что годами перекладываешь XML и джейсоны с помощью спринга, попутно разбираясь в крайне унылой бизнес логике предприятия или банка.
В Го ты можешь убедить кабана, что нужно с нуля написать ту или иную фичу без использования фреймворков. В джаве тебя после этого будут считать дебилом, потому что есть спринг и хибернейт, которые умеют все на свете, а в мире го такое вполне прокатывает.
Ну и вообще скилловые джависты уходят в скалу или го обычно, а джава наполняется вкатунами с заводов и бывшими таксистами, уровень коллективов падает ежегодно.
>>2267492 > go > defer > chan > select > мерзкая параша прямиком из семидесятых Будь это было так, сейчас бы асинхронный код в большинстве случаев не состоял бы из колбеков и async/await'ов покормил хейтера
>>2275671 > стоит врываться в Go фанату С++ С такой формулировкой - однозначно нет, не иронично желаю продолжать наслаждаться своим языком. Правильный вопрос - "я занимаюсь предметной областью х, в ней го вообще применимо?", тут уже можно подискутировать, если подставить разные значения х
>>2276619 > Возникает куча вопросов Это нормально, когда изучаешь что-то новое. Задавай гуглу или итт, если последний вариант - желательно выкладывай примеры своего когда на го плейграунд > Больно во всем этом разбираться самому. Не представляю как в ГО вкатываются с 0 самостоятельно. Ты еще в раст/плюсы не пытался вкатываться, вот там вообще пиздец. А го один из самых простых языков с точки зрения вката. > по релокации памяти Не лезь в кишки без лишней необходимости. Помни про правило 20/80 > пустым интерфейсам Сейчас уже модно писать any, т.к. это буквально что угодно > Думаю может есть какие-то репетиторы? менторы? У меня всегда были сомнения в квалификации людей, которые вместо того чтобы зарабатывать килобаксы в разработке занимаются преподаванием за мелкий прайс. Единственный плюс - в универе можно поёбывать студенток Но ИТТ все твои друзья, поможем чем сможем.
Здравствуйте. Я изучаю Го как девопс, но запутался совершенно.
Написал простую программу с sql и gorilla/mux : package main *db.SQL .. { db, err := sql.Open("postgres", connStr) err = db.Ping() //и все это работает }
А в другом файле и том же package main я обрабатываю запросики:
err := db.Ping()
и db == nil !
БЛЯДЬ
что вообще тут в Go происходит? Я прямо охуеваю с этого. Что можно сделать не так в таком простом примере?
Это все по хаутушкам делаю, за исключением небольших своих добавлений. Из отличий от примитивных программ из инета у меня просто на разные файлы разбито и gorilla/mux .
Думаю, я какую-то детскую ошибку совершил. Может кто угадает какую?
>>2278263 > Думаю, я какую-то детскую ошибку совершил Да, скорее всего так и есть. В хендлере db это глобальная переменная, так ведь?
>{ >db, err := sql.Open("postgres", connStr) >err = db.Ping() //и все это работает >} Тут ты создаешь локальную переменную db, область видимости которой ограничена фигурными скобками, не важно при этом это просто блок из фигурных скобок или функция. Создав локальную переменную с именем db ты теряешь возможность обратиться к глобальной переменной db. Подробнее разжевано тут: https://golang-blog.blogspot.com/2020/05/shadowed-variables-in-golang.html
>>2276814 >>2278699 Это сообщение я же и написал, попутно нафантазировав о том, что можно писать свои кривые велосипеды, так как в гоуленге не принято пользоваться фреймворками... А как в действительности это дело обстоит?
>>2278723 Я не писал на джаве, по этому мне сложно сравнивать. > можно писать свои кривые велосипеды, так как в гоуленге не принято пользоваться фреймворками Ты так говоришь, словно в го вместо веб-сервера голый TCP-сокет и вокруг него нужно написать свой веб-сервер. Или что каждый день гоферы сидят и свои велосипедные недо-фреймворки пишут под каждый проект. Я на го работал на 2-х проектах, и в каждом была запилена очень тонкая абстракция над стандартным http + внешним роутером, и больше никто ничего не дополнял годами. Я только однажды добавил сервить embedded files А большую часть времени что так, что эдак - ты всё равно пилишь бизнес-логику. А то что в го не принято использовать фреймворки значит приблизительно тоже самое, что и когда говорят что react.js это не фреймворк - что мы вместо одной жирной зависимости которая умеет вообще всё импортируем десяток узкоспециализированных зависимостей по необходимости. DI отдельно, генерация документации отдильно, ORM/драйверы бд - отдельно.
>>2279093 Видеоконтент это в 99% случаев хуита для слабоумных, по тому что нет других причин смотреть 30 минут видео вместо того, чтобы прочитать этот материал тестом минут за 7-10
На чем быстрее будет работать круд с рест апи и почему - на го или на пхп? Догадываюсь, что на го. И ещё - его же можно будет просто на сокет повесить через tcp порт? И будет ли при этом какой-то выигрыш у http?
>>2279741 > На чем быстрее будет работать круд с рест апи и почему - на го или на пхп? Догадываюсь, что на го. Если это действительно круд, Go будет незначительно быстрее. > И ещё - его же можно будет просто на сокет повесить через tcp порт? И будет ли при этом какой-то выигрыш у http? Это как? Невозможно, конечно. Рест гвоздями прибит к http, который работает поверх tcp.
>>2279741 Смотря что ты поднимаешь под CRUD. Если то что ты обычно пишешь на php - нет.
Правильный бекенд на Go делает какую-то логику : проверяет права, отдает "глобальные" данные , накапливает и откладывает обновления в базу. В этом случае, конечно на Go быстрее даже для мелкого бизнеса.
>>2279751 > Это как? Невозможно, конечно. Рест гвоздями прибит к http, который работает поверх tcp. Точно, забыл про это. Ну а если не именно rest юзать, а что-то другое? Типа какой-нибудь бинарный протокол юзануть или тот же grpc?
Задача простейшая, уровня "принять джысон - отдать джысон", прочитать/записать данные из базы. Авторизация будет через OAuth. Желательно прикрутить сваггер.
>>2279887 > Смотря что ты поднимаешь под CRUD. Описал выше.
> Если то что ты обычно пишешь на php - нет. Блин, откуда столько пафоса, пчел? Откуда ты знаешь, что я там обычно пишу на пхп?
Понятно, что бинарник будет быстрее интерпретируемого япа, я пытаюсь понять, на сколько конкретно, скорей всего сделаю два варианта и напишу какую-нибудь тестилку, которая будет бомбить запросами и сравню.
>>2280231 Нет, то что ты описал делает конструкция > type customError = uint А твоя же конструкция создает отдельный тип, который основан на базовом типе uint, но уже имеют другой набор методов, по этому имлементит другой набор интерфейсов.
>>2280223 > я пытаюсь понять, на сколько конкретно Если тебе действительно важно увидеть конкретные цифры на конкретном железе в конкретном окружении - тебе только бенчмарк поможет. Если же речь "на сколько оно будет быстрее? Так, примерно, можешь почувствовать?" - в теории у тебя 99.98% времени будет занимать работа с сетью и диском и разницу ты почувствуешь только на очень большом скейле.
>>2280267 Это значит что оно в памяти лежит лежит одинаково и можно его кастить из одного типа в другой. Ну и да, при инициализации оно имеет одинаковое zero value >>2280268 Это называется underlying type, ищи по этому термину
>>2280672 Классика для го это net/http + gorilla mux, это сочетание отражает производительность усредненного бекенда на го.
Но максимальную производительность ты выжмешь только на https://github.com/valyala/fasthttp + нестандартные json либы, которые не используют рефлексию > Какой скейл считается очень большим? 1-10 миллионов записей за раз? Тут зависит от железа же. Я бы в твоем случае арендовал за 5-15$ виртуалку и посмотрел сколько максимум реквестов в секунду можно выжать на этом железе при около-нулевом количестве 500-х ответов. Потом можно будет еще с настройками ОС поиграться, если еще желание останется.
>>2280223 >Блин, откуда столько пафоса, пчел? Откуда ты знаешь, что я там обычно пишу на пхп?
Может быть потому что я писал и на php и на go ?
потому что ты не мог написать код на php использующий глобальную инициализацию и разделяемые между запросами переменные(я хз как они там это называют, но сейчас активно движутся в этом направлении). Если бы мог, то ничего бы не спрашивал.
Главное отличие всех бекэнд-решений не на php - глобальная инициализация и достигаемое этим качественно иная производительность. Это почти всегда лучше php.
И еще один вопрос: что произошло с библиотекой tensorflow ? Почему ее для Go больше не поддерживают? В книжках еще можно найти примеры использования, но сейчас как будто все закрылось.
Каков современный способ доведения до продашкшона ML-приложений по обработке каких-нибудь картиночек? Неужели в питон через веб-апи пихают?
вопрос, ПОЧЕМУ так сложилось? Какие идеи у Пайка с его бандой? Что ожидать в будущем?
В конечном счете, вопрос, стоит ли МНЕ изучать Go, но на этот вопрос никто из вас не даст ответа. Поэтому нужно понять откуда это все пришло и куда придет.
>>2280939 > Может быть потому что я писал и на php и на go ? > потому что ты не мог написать код на php использующий глобальную инициализацию и разделяемые между запросами переменные(я хз как они там это называют, но сейчас активно движутся в этом направлении). На пыхе есть асинхронные фреймворки, Swoole, ReactPHP и ещё там что-то.
> глобальная инициализация Что ты под этим понимаешь? Давай поподробнее.
>>2281008 типичная ситуаци>>2281008 >На пыхе есть асинхронные фреймворки, Swoole, ReactPHP и ещё там что-то. И их никто не использует. Нет культуры написания непрерывно работающих приложений.
>> глобальная инициализация >Что ты под этим понимаешь? Давай поподробнее. Смотрю, ты настоящий пхпшник.
По этим я понимаю все варианты переиспользования результатов работы любого кода. Глобальные переменные хранящие все что угодно - кеш курс доллара, права админа, токены-хуекины, словарь спам-слов.
>>2281024 > И их никто не использует. Нет культуры написания непрерывно работающих приложений. Это да, согласен.
> >> глобальная инициализация > >Что ты под этим понимаешь? Давай поподробнее. > Смотрю, ты настоящий пхпшник. > По этим я понимаю все варианты переиспользования результатов работы любого кода. Глобальные переменные хранящие все что угодно - кеш курс доллара, права админа, токены-хуекины, словарь спам-слов. А тут какой-то бред пошёл. $GLOBALS тебе на что? Кеш обычно в редисе держат. Что ты там разрабатывал-то на пыхе, персональные хоумпаги?
>>2281041 но ведь если все используют один и тот же фреймворк, то ты просто можешь нанимать программистов с улицы. или перекидывать между проектами не тратя время на адаптацию ( как в Google) .
Аноны подскажите ньюфагу, плез. Собираюсь перекладывать данные из 1 сервиса в другой. Первый сервис это Opensearch (elasticsearch) отдающий документы в json'ах. У программы (перекладывателя) будет файловый конфиг, в котором я напишу как и в какие индексы opensearch сходить и какие поля документов мне интересны. Проблема в том, что я не могу в момент конпеляции задать статически типы структур интересующих меня полей документов, чтобы натянуть на них получаемые по http json'ы, потому что в момент момент конпеляции они еще не известны. И станут известны только в момент выполнения, чтения конфига. В какую сторону копать?
>>2281424 Ты перекурил, по ходу, заговоры мерещатся. Тебе же уже сказали, что в го должно быть везде всё просто. Я вот в сторону echo сильно посмотриваю, как вкатун. Очень уж сильно просто там всё. Есть подводные?
Почему я не могу делать foo.Execute(MoveLeft{}), но могу foo.Execute(&MoveLeft{}), если в сигнатуре метода объявлено, что получаем параметр не по ссылке?
>>2281461 Если тебе буквально нужно переложить json - то тебе и парсить его не нужно, можно просто слайс байт прочитать и передать его в другое место, или даже io.Copy сделать, если возможно. А так да, либо мапа с пустыми интерфесами, либо с https://pkg.go.dev/encoding/json#RawMessage, если нужно какое-кто конкретное значение вытащить.
>>2281922 Ну в пыхе например фреймворк - это альфа и омега, всё предоставляет, от ORM до тестов. Широко распространены "макаки одного фреймворка", которые даже не представляют, что можно что-то без фреймворка делать, клепают бесконечные "сайты с админкой на ларавеле", ИЧСХ, даже деньги этим зарабатывают.
>>2282156 Так это даже не пхп разработчики, а что-то уровня ларавель- или даже вордпресс-девелоперы. Теперь понятно почему у них горит от го - быть чисто "net/http" девелопером ну уж совсем зашквар какой-то
>>2282156 Сайты с админкой на одном фреймворке клепают для жадных кабанов с простыми требованиями, потому что зачем придумывать что-то сложнее, если никакой сложной логики или хайлоада не будет. Для нормальной макаки не составит никакой сложности переключиться в той же пыхе с ларавеля на голый роутер + http из симфони и взять doctrine вместо богомерзкого eloquent.
Решил немного продвинуться дальше и раскидать код по модулям по этому туториалу: https://go.dev/doc/tutorial/call-module-code (Да, мне непривычно размещать проект на гитхабе я че-то не врубаюсь как тут у вас принято, но туториал не выглядит плохим )
Все заработало, я могу сделать и go build и go run .
Но что все не нравится vscode ? Решительно невозможно так работать! Как укротить vscode ?
>>2285023 Спасибо. Если честно, дико выглядит сигнатура метода, где правила замены ты последовательно передаешь в фабрику через запятую. Почему бы мапой не передать?
>>2285568 Питоновских kwargs не завезли, по этому используем *args. А другого сахара у меня для вас нет. А через мапу - так это вообще никакого сахара не будет тогда, куча лишних символов появляется
Пилю свою либу, просто для развлечения и вот назрел вопрос. Что для вас хуже, или от чего больше воняет: копипаста в соурс коде, или ебанутое нагромождение абстракций?