Go или Golang — компилируемый язык программирования от создателей таких шедевров, как UTF–8, язык С, UNIX, Plan9 и других. Go поддерживает типобезопасность, богатую и универсальную стандартную библиотеку функций и инновационные семантики одновременности: все то, что мы в индустрии называем concurrency и parallelism. На сегодня язык Go является маяком стабильности, прагматичности, де факто представляет из себя стандарт в мире бэкенд–микросервисов и серверного оркестрирования.
Обсуждаем язык, смеемся с залетных крестоносцев, обсуждаем почему нам не нужны дженерики, наследование и эксепшены, по каждому багу находим трехстраничный пост в официальном блоге Go, объясняющий почему это на самом деле фича, ждем, когда нам завезут дженерики, наследование и эксепшены.
Растобляди завидуют, сектантская запарта не переваривает.
Анончеки, подскажите, как мне решить дилему >ID *int64 или >ID int64 или >ID int64, idSet bool (фу блять фу нахуй) При создании экземляра ID не известен, и получается после добавления в базу. Соответственно, как чекать, ID действительно 0 или не установлен.
Играться с базой, чтобы айдишник гарантированно не равнялся нулю - дроч. Хочу максимально просто на автоинкременте без лишних модификаций самой базы. Ровно как и генерить айдишники в программе. Ровно как и ебаться с конструкторами с инкапсуляцией. Стракт публичный и пользователь я может просто забить хуй на конструктор, плюс бойлерплейт умножается на 2.
Вроде как идея с поинтером неплохая, но чувствую, что поинтеры в данном случае плохо, поскольку везде придется добавлять чеки и вроде как не бест практис.
В общем, рассудите, как лучше сделать. Ситуация же дефолт.
Прочитал сейчас про срезы и если в них добавить новый элемент, то в одном случае он затирает элемент исходного массива, а в другом создаёт новый. То, что у меня с этого выгорела жопа, ничего не сказать. В каком вообще состоянии разработчики придумали это!? Почему нельзя было сделать предсказуемое поведение, где явно происходит создание новой сущности!?
Какая-то пиздота на пикрелейтед прилетела в мой пет. Че с этим принято делать? Не могу разобраться с тем что написано в go.sum там действительно упомянуты какие-то древние версии например есть такая строчка: golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod
Я даже не импортирую этот пакет напрямую и не вполне понял какой именно пакет его заимпортил. go get -u сделал - кажется не помогло.
>>2615066 Чем не предсказуемо то, что если у тебя capacity < length, то нужно заново аллоцировать, ибо банально некуда больше разместить???? Во всех языках так работают динамические массивы
>>2617995 Во всех языках - это отдельный контейнер, у которого свой АПИ с защитой от "дурака". А тут тебе вываливают все кишки и делай что хочешь. Очень легко ошибиться.
>>2618015 Кто тебе какие кишки вываливает умник, что ты вообще несёшь? Чем тут блять отличается от других языков то блять? Единственное отличие, что слайс не копия, а и есть сам по себе массив с нужными оффсетами, о чем написано даже в ебучем го туре и в каждом ебучем месте об этом написано, но ты же тупой, для тебя это «кишки» тупой сука питоноеб
>>2618050 К примеру, в джаве есть ArrayList, в котором массив лежит внутри. Сам объект управляет им, а мы просто пользуемся благами динамического массива. Доступа к внутреннему массиву у нас нет и соответственно ничего сломать мы не можем.
>>2617836 Пошел почитать про Elm и охуел. Кому это надо вообще? Ну нужен простой типовой фронт, идешь и делаешь его хоть на jquery, хоть на ванильном реакте. Нахуя отдельный язык тащить в таком случае? вообще было бы классно иметь какой-нибудь yaml-конфигурируемый интерфейс типа bootstrap, чисто чтобы его вообще без программирования натягивать на сваггер апи в таких неважных вещах
>>2617076 Сейчас, да, заметил, что по крайней мере в SQLite автоинкремент начинает с единицы. Но вообще то это нихуя не очевидно, я с базами работать только начинаю.
Это типо универсальное соглашение и в 99% случаев база присваивает id с единицы?
Тогда в принципе можно и на обычном int64 херачить.
>>2617076 > господи, с какими дураками на одной борде сижу Не перестаю охуевать с этого, кстати, я уже подозреваю, что тут кроме джунов и вечных джунов не сидит никто. И тут непонятно, либо это такой срез индустрии и у нас действительно 99 кодеров из 100 долбоебы, или это специфика двача такая если последнее, то это что-то обо мне говорит
>>2615001 1) Можешь считать, что если id == 0, значит сохранения в базу не было. 2) Вообще такая логика как правило говорит о том, что ты что-то делаешь не так. По идее тебе в коде должно быть или не важно, с чем работать или ты уже точно знаешь, что сущность, с которой ты работаешь - уже зафиксирована в бд. 3) Если хочешь обмазаться типами, то можно разделить данные и сущность со служебными полями, вот так к примеру: https://go.dev/play/p/F6XWYXpIlXm
>>2618169 перекатываться с петона особо нет. будет меньше ебли с зависимостями, шарить скриптики проще, ну и легче параллелить хуйню. с другой стороны меньше пакетов и тупо import gosuslugi для скриптика не получится сделать за отсутствием либы. ну и базовая хуйня вроде пройтись по строчкам будет вербознее. а с другой стороны если бы ты уже писал на го, то петон тебе нахуй не вдался бы, кроме случаев с либами
>>2618180 >А что есть другие варианты? хз, от задачи зависит, повседневные скриптики разными же бывают и количество либ разное. я привел пример с апишкой госуслуг. ну или чисто для примера (сейчас в гошке вроде есть норм покеты) в петоне будут более удобные/зрелые пакеты штобы собрать бота для телеги. тупо потому что там юзеров больше было и они его успели развить и передизайнить несколько раз. >Практически всё что когда-либо надо было сделать - делалось через уже готовые либы ну для популярных задачь да
>>2618184 Про пакеты спорно, и там и там есть и говно и нормальные.
>>2618169 Короч, ключевая разница, это бекенды, апи и параллельная обработка данных. Го из коробки очень быстрый и эффективный и при этом поддерживает нормальную многозадачность, что позволяет твоему апи отдавать ответы с очень маленькой задержкой и при этом программировать это все на более менее простом языке, которые не такой сложный как плюсы и не такой жирный, как джава. Всякий финтех, а также яндекс (еда вроде бы) и прочие жирные стартапы поэтому активно пишут сервисы на го, а те, которые не на го (а на чем-то медленном, тот же php или питон) - на го переписывают, потому что во первых экономия ресурсов, го жрет сильно меньше, а во вторых производительность. Ну и всякие сетевые утилиты а-ля кубернетес.
Питон же из всех более менее популярных языков вероятно самый медленный не считая руби, но тот вроде уже мертв и апи на нем пишут только от большой любви или незнания прочих языков. Ну или легаси, не без этого. Но при этом питон за счет своей слабой типизации очень удобен для быстрого написания скриптиков и всяких прототипов. Про cpython и прочую эзотерику вспоминать не будем
Поэтому для скриптиков менять стек я не вижу смысла, оставайся, где был.
>>2618219 >Го из коробки очень быстрый и эффективный и при этом поддерживает нормальную многозадачность, что позволяет твоему апи отдавать ответы с очень маленькой задержкой и при этом программировать это все на более менее простом языке, которые не такой сложный как плюсы и не такой жирный, как джава.
Меня немного напрягает то, что внешние пакеты подсасываются с гитхаба. Где гарантия, что я не скачаю вирус и мне не заменят все файлы на сердечки, потому что я не из той страны?
>>2618414 Сделай хелпер-функцию try или assert и не парься, только в продакшен её не кати. Или используй "_" вот так : val, _ := funcWithError()
>>2618420 Это проблема не гитхаба, а опенсорса, никто не гарантирует, что ты не скачаешь хуйню через тот же npm к примеру. При этом go.mod и go.sum во первых фиксируют версии, то есть, если ты поставил себе коммит X, то ты его и будешь использовать и если кто-то добавит хуйню в коммит X+1, то без осознанного go get -u ты на заминированный коммит не переедешь. А во вторых, go.sum хранит также чексуммы и даже если кто-то изменит код существующего коммита, то чексуммы не сойдутся и го это спалит и выругается. Ну и никто не мешает тебе использовать зеркала, кэширующий goproxy или что угодно ещё, существует много инструментов.
>>2618748 >го со сборщиком мусора Он уже перестал статтерить весь сервер нахуй или его просо сделали отключаемый и на том забили хуй (после того как с го съебались крупные ребята)?
>>2619148 Если бы ты внимательно читал эти "новости" трехлетней давности, или хотя бы пытался прочитать то, о чём я тебе писал вместо того, чтобы пытаться самым примитивным образом доебаться, то ты бы понял, что в дискорде (как и в дропбоксе до этого) они по сути делали огромный LRU кэш и в этом случае (огромная хреновина в памяти с (пере)записями по ключу) тебе в принципе языки с гц не нужны, гц будет тупо тратить кучу ресурсов на сканировании памяти, блокировки и так далее, когда у тебя профиль работы приложения вообще не подходит под такой флоу. Вообще примерно любой язык с гц у них создавал бы проблемы из-за просадок во время работы гц: хоть го, хоть джава, хоть эрланг, хоть кто. Какие-то лучше, какие-то хуже. И очевидно, что для того, чтобы тупо держать в памяти хэш таблицу и отдавать из неё значения, языки с прямым управлением памятью подходят намного лучше.
Возвращаясь к го, теоретически ты конечно можешь полностью отключить гц debug.SetGCPercent(-1) если не ошибаюсь и управлять памятью вручную, но тогда непонятно, зачем тебе го в данном конкретном случае. Так что чуваки из дискорда правильно поняли, что выбранный ими инструмент неоптимально решает их конкретную задачу и вместо того, чтобы делать си из го, они поменяли язык на более эффективный для их задачи. Здесь нет никакой проблемы ни в дискорде, ни в самом го, который по определению, как "язык с cms гц" обладает преимуществами (легче программировать) и недостатками (оверхед за счет гц).
>>2619692 Я если честно уже заебался отвечать на тупые набросы, вы если уж хейтите, придумайте что-то поумнее. Тебе прямым текстом сказано, что под профиль нагрузки "хэш таблица в памяти" языки с гц не очень хорошо подходят. Любые. В том числе го. Но на го, джаве или js знаешь ли никто ин-мемори бд и не пишет. При этом есть куча других профилей - всякие лоу-лейтенси апи, байтомолотилки и тд, где такие языки работают хорошо.
бля чет прикоснулся к го, и утонул в ошибках: импортируемые модули отваливаются для каждого нового проекта нужна новая папочка для каждого модуля нужна папочка модули отваливаются импорты срут ошибками это че такое я не пойму обновил эту поеботу с 1.16 и в маршрутке началось такоое..
>>2620007 Неправда, никаких богоподобных фреймворков как в других языках в го нет. Точнее, встречается иногда говно на гитхабе, но я не знаю ни одно проекта, где такое бы реально использовалось.
>>2620050 Ты что-то где-то у себя поломал скорее всего. Не представляю что, я ставил го раз 10 на разные системы и проблем не было ни разу. Снеси просто всё, что есть и поставь заново. И приходи с конкретными ошибками уже.
> для каждого нового проекта нужна новая папочка > для каждого модуля нужна папочка Эм, так везде, на всех языках. Даже не представляю, как может быть по другому.
>>2618169 Сильно зависит от контекста. В ряде случаев лучше писать даже не на питоне, а на баше. Из плюсов использования го, кроме конкурентности, о которой уже писали, переносимость и обратная совместимость: скрипты на любом интерпретируемом языке требуют в системе установленный интерпретатор, при том версии не ниже чем та, в которой поддерживается самая новая из использованных фич. В случае питона сломана еще и обратная совместимость, когда скрипт для второй версии не запускается на третей. Т.е. написанный на питоне 10 лет назад код уже не работает. В го такой проблемы нет, бинарь по дефолту зависит только от libc, но при желании даже этого можно избежать и сделать программу, которая будет работать даже в пустом контейнере. Да и го код 10 летней давности всё еще компилируется. Возникает, конечно, проблема с тем, что на системы с разными ос/процессорами нужны разные бинари, но это решаемо, в го кросс-компиляция очень простая.
>>2618748 > Или используй "_" вот так : > val, _ := funcWithError() Ни в коем случае не делайте так. В лучшем случае вы упадете на следующей строке, при некорректной работе с nil val. В худшем вы продолжите исполнение с некорректными данными, если val это стринг или число. Так можно словить сложно отлаживаемое ебучее поведение, как в баше без set -e и set -o pipefail Корректное использование игнорирования ошибок существует, но очень редкое. А вот хелпер это да, хорошая идея. Я обычно такой использую https://go.dev/play/p/oJ65gdf6z3d
>>2620235 Запрос был прямой > , дак это ошибки, если что-то не используешь ответ на это тоже прямой - хочешь пока накидываешь код что-то пока не использовать - юзаешь _. В продакшен я и не советовал ему это пихать
>>2620396 Обычно берут готовый роутер типа Echo, только это не фреймворк, а либа, то есть просто обертка вокруг net/http, которая добавляет более удобную работу с данными, миддлвари, опционально всякие распространенные хотелки по типу basic auth middleware и тп.
>>2620319 Его check() это безусловно хуйня для продакшен кода, но если нужно быстро написать скрипт или просто набросать макет кода, то это нормальная тема. А мы как раз про такой сценарий и говорили изначально.
И да, не понимаю, кто сейчас учит языки по книгам, это прошлый век. Это паттерны и алгоритмы не устаревают и то всякие новые модификации случаются , а у языков раз в год мажорные апдейты выходят. Я все свои языки учил так: просто садился и начинал программировать, как мог, параллельно читая статьи с хабра по языку. Полезно ещё на публичные проекты поглядывать, но в го я к сожалению не могу посоветовать действительно идиоматичные и качественные публичные репозитории.
>>2620768 Мне >30 и я не могу читать книги по программированию, по одной простой причине: одна половина там устарела, а вторая является водой, которую можно и нужно пропускать. Намного проще сидеть и гуглить статьи, которые раскрывают конкретный вопрос.
>>2620774 Да, копаться в таких же устаревших и водянистых статьях, выискивая ололо-актуальное и информативное. Уже бы про документацию бухтел лучше, не так смищно бы смотрелось.
>>2620785 Документацию живых проектов хотя бы обновляют и она не может устареть. Да и воды там зачастую немного. А насчет статей - ну так ты ищи нормальные и всё. По любому вопросу их десятки, ищешь и смотришь на даты.
>>2620790 Ну так и книги ищи нормальные. Специально для таких шизиков хитрые издатели начинают уже в ноябре-декабре выпускать книги с следующим годом выпуска. Твои статьи могут в такое? А? А?
>>2620909 Не мешай ему жить в выдуманном мире, где серьезные (тм) люди пишут полноценные серьезные (тм) книги. А в релаьности та же моча и шанс найти хорошую статьюпо интересующей тебя теме намного выше, чем аж книгу.
Я могу в этой пиздоте уменьшить размер получающегося бинарника cd fluent-bit-plugin-yandex/ export fluent_bit_version=1.8.6 export plugin_version=dev CGO_ENABLED=1 go build -buildmode=c-shared \ -o ./yc-logging.so \ -ldflags "-X main.PluginVersion=${plugin_version}" \ -ldflags "-X main.FluentBitVersion=${fluent_bit_version}"
Почему в го решили писать типы шиворот на выворот? В Си всегда было удобно читать текст программы, что идёшь слева направо, сверху вниз. А тут на типах постоянно приходится перечитывать типа справа на лево. Очень не удобно.
>>2623501 В нём Я думал даже зачекать (разумеется выпросив у работодателя компенсацию хотя бы части стоимости), но мой пыл резчайшим образом охладил факт того, что трек "продвинутый хуесос", хотя и включает в себя полностью трек "простой хуесос", о чём прямо и заявлено — при этом не позволяет докупить расширенную часть себя отдельно. Т.е. либо ты берёшь расширенного хуесоса, либо берёшь простого, а потом "НУКА ДАВАЙ ещё разочек фуллпрайс заплати сынок ёбаный!" и тратишь 76к + 160к, за то, чтоб повторить половину курса, которую ты уже прошёл. Либо изволь раскошелиться сразу на полторы сотыги. В пизду, проще самому изучить чем в это говно антиконсьюмерское ввязываться.
>>2623656 Пиздец цены, вы долбоебы что ли столько платить? Да даже 10к это уже дохуя. Это же не роадмап, это ёбаное ничего, вы берете го тур и доку, читаете их и получаете ровно то же самое, скорее всего ровно теми же словами. Нахера вы это делаете и кормите всяких жирных тварей? Из надежды что-ли, что вас научат чему-то уникальному? Зря, всё это в интернете есть и публично доступно.
>>2623818 Тогда нахуя за это другие людя платят. Понятно, конечно, что раз платят, то долбоебы, а долбоебы должны страдать - но всё равно, нахера =/ Любые курсы это говно, чел, любые. Программированию невозможно научить на курсах, ему можно только научиться самому, а для этого никакие курсы не нужны. В интернете тонны гайдов и мануалов для самых маленьких, а в телеге сотни каналов, где на нубские вопросы можно почти моментально получить ответ. Курсы это место, где ты платишь деньги за то, что тебе в лучшем случае ртом на видео прочитают мануал из интернета. В худшем, тебе скинут доступ к копипасту мануала (нескольких) из интернета.
>>2623900 Я умею программировать, но я всё ещё долбоёб (мидл), который умеет только хуярить по тз и когда надо запилить проект с нуля, особенно на незнакомом языке — у меня глаза разбегаются. Но правда конечно в том, что если мне разжуют проект, то я останусь на том же уровне, очевидно. С другой стороны, если разжуют аккуратно, давая лишь примерное направление — может чего и выйдет путного. >>2623966 >устроиться на работу Ну это понятно, я хочу немного покодить прежде чем туда устраиваться. В любом случае уже решил через EAP https://www.jetbrains.com/go/nextversion/
только начал изучать golang. написал как в видеоуроке, ожидая что вывод будет таким: 1 2 3 4 но выводит бесконечную последовательность... Притом то такой такой цикл работает как надо: n:=1 for n<5{ fmt.Println(n) n++ } Помогите пожалуйста
>>2624079 > Я умею программировать, но я всё ещё долбоёб (мидл), Тогда тебе тем более курсы не нужны. Сеньором тебя сделает опыт и архитектурные навыки, которые тоже опыт. Многой работай над сложными проектами, чтобы его получить.
>>2624100 Успел поработать над одним, потом менеджмент сделал ход конём и запилил проектную команду, а я остался за бортом лениво подкостыливать легаси, уровень задач упал до плинтуса, по сути больше половины задач — стажёрские/джуновские, от чего хуёво и мне и бизнесу (мне — понятно почему, бизнесу — от того что стреляет дорогими бронебойными снарядами по небронированным целям)
>>2624113 Одного проекта мало, чтобы подняться как бы над проектом и смотреть на него уже с архитектурной точки хрения, нужна насмотренность. Когда сделаешь одно и то же 5-10 разными способами и в половине случаев обосрешься, то вот тогда уже сможешь сравнивать и делать выводы. В-общем, путь уже от миддла до сеньора занимает года 4 фулл тайм работы над разными проектами, сложными и чтобы один отличался от другого, на мой взгляд. Чтобы в одном ты делаешь апи, в другом работаешь над стримингом, в третьем разрабатываешь конструктор и тд и тп.
>>2624079 почему просто не взять опенсорсный православный вскодиум/вим? единственный раз когда у меня появлялось мозжечковое желание попробовать голанд это когда в самописный голандовский плагин нашей компании добавили удобные фичи, заменяющие часть (5 минут) работы руками
>>2624128 Потому что вим это не IDE, а просто редактор и даже если ты до жопы обмажешься плагинами, то не сможешь сделать из него IDE? Не знаю насчет го, но с другими языками IDEA творит прям чудеса, встроенный рефакторнг, генерация, темплейты и так далее позволяют писать код практически без нажимания на кнопки, просто хоткеями. Вим в лучшем случае пародирует такую мощь. Другой вопрос, что почти все разработчики используют возможности IDE процентов на 5, просто как редактор, а потом ещё и начинают что-то вякать про вим. Долбоебы, одним словом. Джетбрейновские IDE умеют делать прям пиздец сколько много всего полезного.
>>2624131 хз, я конечно всех фичь не знаю, но штуки уровня вынести кусок кода в отдельный метод/переименовать метод во всем проекте/запустить генерацию или отдельный тест постепенно в редакторонезависимые лэнгуеч серверы мигрируют. а часть хуйни все равно из консольки приходится использовать лично я с разной стпенью эпизодичности помимо го/sql там луа/петон/баш/петон использую и не иметь необходимости настраивать/привыкать к несколькиим редакторам удобно. хотя конечно кому-то норм, холиварный вопрос возможно в го треде это обсуждать не стоит
>>2622358 > Почему в го решили писать типы Потому что не осилили нормальный вывод типов как в нормальных языках.
>>2622358 >А тут на типах постоянно приходится перечитывать типа справа на лево. Ну с такой проблемой все-таки скорее к психиатру. А так - бывает неудобно переключаться, но вопрос привычки.
>>2624247 Лучше пользоваться полностью бесплатным VS Code, потому что лицензия может закончится в самый неподходящий момент, а потом перейти на другую IDE будет сложно. Кроме того VS Code ест мало памяти, а продукты от жидбрейнс со старта сжирают по 4 гига.
>>2624277 >а продукты от жидбрейнс со старта сжирают по 4 гига Это само по себе не самое смешное. Самое — это когда у тебя игры на разогнанной с поджатыми таймингами ОЗУ работают стабильно часами, а pyCharm вешает нахуй всю систему.
>>2624983 Зависимости же в любом случае должны будут прокидываться через слои кода. Без контейнера количество передаваемых из фукции в функцию зависимостей растет как снежная лавина. Это общее для всех програм на всех языках.
>>2625254 Если речь о монолите то не оверкил и не антипатерн. Какой нахуй антипатерн, это основа любого фреймворка IoC, composition root. Если в твоей гошке адепты простоты, которая как известно хуже воровства, развели детский сад то это не значит что весь остальной мир - анипатерн.
>>2626379 А хоть джун или просто вообще мимо прогинга? Почему вам аргументы приводишь, может быть и ошибочные, а вы только квакаете НИНУЖНА! ХУЙНЯ!. Хули вам трудно по пунктам разобрать что не так, если вы такие профи? Как у Омара Хайма: Мастер просто говорит о сложном, А подмастерье — сложно о простом.
>>2626411 Это все эвфемизмы для слова ХУЙНЯ, а не аргументы. Что непонятного в словах "для монолита"? Для микросервисов то ежу понятно, что некуда приткнуть этот DI.
Ряяя, так нельзя. Вы НЕПРАВИЛЬНО его используете. Детишки, щас вам немножко покажут кусочек взрослого мира, напишут аналог спринга, научат писать по паттернам. Ну а потом этот язык выкинут нахуй, ибо никому го не нужен и лучше все эти вещи делать на джаве, в которой есть абсолютно всё и не надо изобретать велосипед.
Пришёл к следующему выводу: на монолитах в принципе можно жить в fx, на микросервисах и средних размеров сервисах DI для инверсии зависимостей нафиг не нужен - он только добавляет лишней магии в код. Лучше руками прописать адаптеры-коннекторы и прокинуть куда надо.
В кровавом интерпрайзе я обыно вижу что пилят что-то, заточенное под свою инфраструктуру, и там инициализацию большей части зависимостей вытаскивают в отдельный модуль.
Вот не пойму, почему для мапы можно использовать только встроенные типы? В чём была проблема определить парочку интерфейсов, чтобы пользователи могли определять функции типа Equals(), HashCode() и Compare() и таким образом мапы могли бы работать с любыми типами, реализующими эти интерфейсы?
>>2627358 А как ты собираешься это сделать? Тебе нужно будет тогда передавать указатель, а значит еще и следить за ним в маре каким то образом, ибо при передаче копии - тебе пришлось бы делать статическую структуру например, потом свои методы хеширования тоже ебала еще та, решение проблемы коллизий слыхал?
Да в принципе можно сделать. Я думаю даже пакеты есть уже (с дженериками). Надо бы поискать
> при передаче копии Да, это проблема, но проблема не фатальная.
> потом свои методы хеширования В стандартной библиотеке есть пакет maphash специально для кастомных реализаций хэшмап
> решение проблемы коллизий слыхал Для решения проблемы колиззий есть сто-пятьсот методов, которые можно посмотреть как из существующих хэшмап того же го, питона или эрланга, так и из каких-нибудь статей по CS
Вообще запилить свою хэшмапу на дженериках для type HashKey[E] interface { Hash(*maphash.Hasher) Equal(E) bool } - звучит как прикольная задача для выходных
>>2628042 >миддлоджуны Чел, хэшмапы на первом-втором курсе проходят, але (алсо напоминаю, что джун - это разработчик с опытом 6-12 месяцев и 1-2 проектами (разработчик без прод опыта называется "стажер"))
Алсо, дело не в /зк, мой коммент относился именно к го и его команде разработки (в основном к самому пайку конечно, нынешние мейнтенеры превозмогают как могут; но в целом го-вей - это именно (нахерачить говна, а потом все переписывать^W^W^W^W^W^W) игнорировать давно исследованные и хорошо известные вещи)
>>2628092 > но в целом го-вей - это именно (нахерачить говна, а потом все переписывать^W^W^W^W^W^W) игнорировать давно исследованные и хорошо известные вещи Насколько бы я сам был не согласен с некоторыми вещами в го, в данном случае ты доебался к очень странному месту. В го есть нормальная хеш мапа, а именно обычный map, который работает для всех сравнимых типов. Желание в качестве ключей использовать всякие объекты в любом случае странное и вас действительно никто не заставляет использовать именно встроенный map, ограничения которого известны - вы вполне можете взять любой другой. При этом: можно ли было сделать в стандартной мапе поддержку интерфейсов? Можно. Было бы лучше? Ну наверное было бы. Является ли это значимым косяком? В моём случае точно нет, за 5+ работы гошником я не упёрся в это ни разу.
Вот дженерики поздно зарелизили - это да. Зарелизили их неполноценными - это да. Не имплементировали их в стдлиб - это да. Нет нормальных енамов в языке - да. Всё на указателях, которые нихера не безопасные - да. Пол-кода делается на zero values вместо нормального нуллабилити - да. кстати почти всё это решено в rust :3 Вот такие предяъвы я бы почитал. Но почему-то никто их не пишет, вместо этого придираются ко всякой ерунде, то к большим и маленьким буквам (который public / private), то вот к мапам зачем-то.
>>2628136 >Вот такие предяъвы я бы почитал. Но почему-то никто их не пишет в каждом треде по несколько раз обсирают женерики и жалуются что никакврасте
>>2628136 >вас действительно никто не заставляет использовать именно встроенный map, ограничения которого известны - вы вполне можете взять любой другой. >>нахерачить говна, а потом все переписывать
>Вот такие предяъвы я бы почитал Так моя предъява и была в том, что дебил в малиновом пинджаке ниасилил параметрический полиморфизм, встал в позу и начал всем доказывать, что НЕНУЖНО и ГОЙ-ВЕЙ, в итоге спустя 10 лет разумеется все равно пришлось все запиливать (кто бы мог подумать), только теперь помимо десяти синтаксисов для объявления переменной будет десять синтаксисов для мапы или чего угодно еще, ведь ГО ИЗ ЭБАУТ СИМПЛИСИТИ. Да, и удачи попользоваться сторонними имплементациями стдлиба в языке, который абсолютно не может в метапрограммирование и в котором даже сраные итераторы гвоздями прибиты к встроенным типам и нет интерфейса, который можно было бы реализовать. Ведь ГО ЭТО ПРОСТОТА, так что давайте будет десять разных синтаксисов для итерации по коллекции. А еще давайте запилим в стдлиб марсианский шаблонизатор, но вот мап и фильтер давай программирувай в каждый проект сам(про обработку ошибок я вообще молчу, ну го просто не является типизированным языком в полном смысле этого слова)
>Вот такие предяъвы я бы почитал. Короче это все об одном и том же, и причина тут именно в безблагодатности изначальных авторов, и ладно бы они сидели у себя в подвале и дрочили друг другу письки, но нет же блядь, им дали тонны денег и зафорсили это поделие, которое при этом реально закрывало реально имеющуюся потребность, но сука блядь, из-за своего невежества они вместо того, чтобы сделать нормально, накормили нас говном, и теперь приходится его есть без всякой объективной на то причины, и не было никаких причин делать это говно кроме личной прихоти хуесоса в малиновом пинджаке, и это все минорные вещи которые просто блядь любой комплюктер-сайенс студент мог бы задизайнить нормально, это не сопромат и не имплементация рантайма, в том и бугурт, что это минорные и элементарные вещи, но в них насрано, ой короче идите нахуй, пойду нажрусь, как раз сегодня пятница
И да, паблик\прайват заглавными буквами - это просто комически плохое решение, лол, пожалуй худшая косметическая фича в истории дизайна япов
а еще помните ШУЕ ППШ синтаксис кондишнл компиляции, лол, и как потом за этим хуесосом остальная команда его переделывала го вей, хули, накласть говна и потом переделывать
>>2628136 >rust И да, в том и бугурт, что раст - значительно более низкоуровневый язык, и он тупо хуево подходит для области применения ГОвна. ГОвно скорее сравнивать с окамлом, но сука, если сейчас про окамл начнем говорить я точно нажрусь нахуй
а вот допустим у меня есть структ на 200-300 байт. вы хотите чтобы я его вернул как значение или поинтер? я вот лично не хочу чтобы в местах вызова была мысль в задней части головной корочки что эта хуйня может оказаться nilом. ну и дергается эта логика ну раз 10-100 в день т.е. по сути на перф похуй. но бля меня мучает вопрос а на самом ли деле rule of thumb што на большие структы нужно возвращать поинтеры это не залупа собачья?
>>2628766 > Так моя предъява и была в том, что дебил в малиновом пинджаке ниасилил параметрический полиморфизм, встал в позу и начал всем доказывать, что НЕНУЖНО и ГОЙ-ВЕЙ, в итоге спустя 10 лет разумеется все равно пришлось все запиливать (кто бы мог подумать Я бы мог тебе рассказать, что го это ни разу не первый язык Робба Пайка и что до этого у него во всех языках были дженерики и поэтому они для него более чем осилябельны. Но зачем что-то доказывать фанатикам?
>>2629008 На маленьких объемах тебе вообще похуй, всё что угодно будет работать быстро. А на больших объемах, если у тебя ещё и стек вызовов большой, то за такое большое количество копирований тебе никто спасибо не скажет. Но вообще тут нужен баланс, слишком большое количество указателей это тоже неприятно и гц может начать захлёбываться.
Вообще обычно правила такие, что маленькие структуры можн опередавать и по значению, а большие всё же лучше через указатели. Да, это небезопасно, но ты как бы на небезопасном языке пишешь, смирись или выбирай другой язык.
Мне почему-то Голанг напоминает больше язык Перл, чем какой-нибудь Си. Здесь практически тот же подход: простые вещи делаются просто, а сложные сделать возможно. Также, как и Перл, Голанг не стал "пахнуть" лучше со временем.
>>2629008 Нужно изменять - возвращай указатель, ненужно изменять - возвращай копию. Ну либо везде в проекте возвращай указатель (при условии что на производительность похуй (если не похуй то >духота про профайлинг)).
>>2629072 >что до этого у него во всех языках были дженерики В каких "всех", перечисли пожалуйста. Из полноценных я знаю только лимбо, в котором он был только лишь соавтором, и очевидно многими вещами занимался не он, а его коллеги.
>поэтому они для него более чем осилябельны Еще раз, можно было с самого начала подумать, добавить параметрический полиморфизм (не "дженерики") и зафиксировать синтаксис с учетом возможности дальнейшего расширения. Вместо этого они: а) встали в позу с мантрами про го-вей и симплисити; б) спустя 10 лет сделали ровно то, о чем им говорили с самого начала (и то недоделали), но теперь с добавлением 9000 разных синтаксисов и необходимостью переписывать кучу либ (да-да, формально обратная совместимость не нарушена, возьмите конфетку блядь). К тому же они сами в своем блоге писали о том, что были не уверены, как реализовать дженерики в го, но видимо для тебя это мнение "фанатиков". Алсо, если ты смотрел первые гугловские презентации пайка, то сам мог видеть, что он хуево ориентируется в плт и путается в простых вещах
>>2628136 >В моём случае точно нет, за 5+ работы гошником я не упёрся в это ни разу В пистоне я очень часто делал сеты для проверок уже имеющихся объектов. Для своего класса было достаточно реализовать пару магических методов. В го мне сказали, что все это нинужна.
>>2629096 ну хорошо што про размер стека упомянул, но например такая хуйня (на зашкваренном медиуме) есть https://medium.com/@philpearl/bad-go-pointer-returns-340f2da8289 (еще результаты бенча у меня нихуя не сходятся со статьей пиздос лмао) и наверное нужно понять когда объемы считать большими а когда нет........ вот допустим у меня в структе там 20 int64 и 20 строк = 40*8 байт. кажется что бля достаточно большой но так ли это мистер фриман?
>>2629433 >Нужно изменять - возвращай указатель, ненужно изменять - возвращай копию. это же больше к ресиверам в методах относится? изменение полей же не переаллоцирует структ
>>2628766 >И да, паблик\прайват заглавными буквами - это просто комически плохое решение, лол, пожалуй худшая косметическая фича в истории дизайна япов __такой_хуйни_навалом()
Сейчас в очередной раз поработал на проекте, где активно используется uber/fx и в очередной раз подтвердил свой опыт, что это удобная либа с хорошим апи, но при этом невероятно мерзотно реализованная внутри, как впрочем и всё остальное у убера. Ну вот прям видно, что писали джависты. Всё в десяти обертках, всё максимально абстрактно называется и максимально неочевидным образом происходит. Я там думал дописать кое-чего и им потом реквест создать - так выяснилось, там уровней сложности даже несколько. Интуитивно кажется, что fx должен быть тонкой обёрткой вокруг dig - но на самом деле нихера и там по сути два контейнера, один собственно fx, а второй уже dig. Зачем так сделано - непонятно.
Короче, никогда не используйте код от убера в качестве примеров, так как делают они- делать не надо. Прочих их либ это тоже касается, они даже из сраного логгера, который как бы не рокет сайнс ни разу, ухитрились сделать самолёт.
>>2624090 ты проебал немного в условии цикла. Ты пишешь "1<5", т.е. если переводить на человеческий - "ПОКА 1 (АДИН!!!) меньше 5 то {Действиие}", у тебя единица всегда меньше пяти, т.е. всегда TRUE.
Тебе нужно писать не 1, а переменную i.
Как только переменная i станет больше или равно 5, то будет нужный тебе результат.
>>2631939 Это потому что Го не предназначен для DI, а не потому что код писали """неправильные программисты""". Гугловый DI выглядит еще уебищнее чем uber/fx, потому что - ненужно. Пишите маленькие сервисы и инжектите все руками в инит().
>>2632117 Ты не прав и я как раз писал о другом. fx можно использовать и это нормально выглядит в итоге, особенно удобно, когда у тебя много разных тестов - и тогда ты в каждом пакете отдельно объявляешь var Module = fx.Provide(...) и потом нужные модули подключаешь в контейнер, выглядит похоже на аннотации в той же джаве.
Я же писал о том, что fx хуёво реализован под капотом. Невозможно ничего понять. Я сам писал рантайм di контейнеры и знаю о чём говорю, можно куда качественнее код написать.
> Пишите маленькие сервисы Вот это распространённое заблуждение, как и то, что "Го - язык для микросервисов". Не бывает в жизни исключительно маленьких сервисов, или ты делаешь что-то не так. Бизнес-логика всегда сложная и разветвленная, у тебя всегда много сценариев и хотелок, в рамках одного бизнес-юнита.
У меня было такое неоднократно, к примеру, ты начинаешь писать сервис для какого-нибудь скоринга пользователей и начинается: ты читаешь несколько топиков кафки, чтобы получать все необходимые эвенты. Ты отдаешь паблик апи для фронта, ты отдаешь интернал апи для каких-то внутренних бэкендов и админки, у тебя есть планировщик, который подводит какие-то результаты, у тебя есть разные рейтинги и разные стратегии их расчета, которые применяются в зависимости от необходимой фазы луны, это всё конфигурируется и тд и тп. Если разбить это на миллион grpc сервисов, то ты просто получишь распределенный монолит и будет ещё больнее.
> инжектите все руками в инит это нормально работает в случае одной main или какого-то небольшого их количества. Но когда у тебя к примеру появляются тесты, а особенно интеграционники, то уже становится больно, потому что каждый тест требует той же инициализации, но периодически со своими особенностями, всякими моками и заглушками. В случае с ручным инитом это приводит к адовому копипасту очень быстро. Ну и самих команд может быть дофига. Как вариант, можно делать ручной di в main и отдельно юзать контейнер в тестах и это тоже ок.
>>2632341 >Бизнес-логика сложная Может тогда просто взять полноценный язык (да с полноценной системой типов) для написания сложной бизнес-логики? Ах да, ведь мы уже наняли команду 300кб\наносеков-гошников, ну тогда ладно, авось спустя полгода что-нибудь и высрут. Зато памяти сэкономили.
>>2632891 Го нормальный язык для написания бизнес-логики, не пизди. Интерфейсы есть, типы есть, функции есть, условия есть. В целом это минимальный набор. Не идеальный, но достаточный, чтобы писать сложную логику. Писал 100500 сложных проектов на го и именно с го проблем особо не было, брат жив. Дженерики побогаче бы конечно и в стдлиб побольше всяких filter() и map(), но это уже хотелки.
Существует множество бизнес областей (да почти все на самом деле), где достаточно развесистая логика, чтобы она вылезала за 100к строк, но при этом она не настолько сложная, чтобы ради этого начинать заниматься метапрограммированием. Более того, если ваша логика заставляет вас заниматься метапрограммированием - то возможно у вас джава головного мозга и вы зря нафигачили абстраций поверх абстракций.
Прочитал про срезы и что-то у меня пукан разорвало от них. Это ж надо было выдумать настолько нелогичную и неудобную штуку с тонной подводных камней в использовании! Жесть просто!
>>2633501 Что конкретно нелогично? В го туре сказано, что это просто указатель на основной массив, как и сказано то, что при расширении он уже перестанет быть указателем, что логично, ведь иначе ты не сможешь добавить в него элементы, ибо length > capacity, а значит нужно аллоцировать с нуля, что конкретно тут не логично?
я запускаю горутину и иду пить кофе без остановки вертит сук мой нетполлер селектом взял твои каналы за яичники контекст отменится из них выйдет ошибка
коллега не заюзал gofmt раскрошил ебало второй роба пайка не уважал раскрошил ебало написал женерик функцию раскрошить ебало убил всех джавистов но мне этого мало
>>2633505 Нужно было делать две сущности: срез как неизменяемый указатель на массив со строго фиксированными размерностью и ёмкость, и вторую - динамический массив, где нам без разницы что там внутри, а важно лишь, чтобы он хранил наши значения.
>>2633610 Напиши аналог тайпскрипта для голанга, чтобы он компилировал расширенную статически строготипизированную версию голанга в читабельный голанг.
>>2633501 Это нормальная абстракция поверх массивов, к примеру в расте тоже есть слайсы и они работают почти так же. Неочевидность здесь исходит просто из постановки задачи: ты хочешь иметь непрерывный блок значений в памяти и обращаться к нему, как к переменной - и при этом хочешь уметь аппендить в него значаения сверх лимита. Это автоматически означает, что тебе нужно перевыделить память и переключить переменную на новый блок в памяти. Это же тебе не список, который по всей куче может быть размазан и который потом gc заебется сканировать.
К гошной реализации можно придраться только с точки зрения дизайна функции append.
Но в реальности ты проблем с этим не испытываешь. Просто держи в голове два правила: 1) Вообще всегда присваивай результат аппенда в тот же слайс: foo = append(foo, ...) - кстати есть линтеры, которые за этим следят. 2) По возможности не пытайся менять саму переменную слайса, всегда возвращай новое значнение. Ну примерно как функция append делает. С мапами кстати аналогично.
>>2633635 >к тому же нахера компилироваться в голанг, у него же инфраструктура по факту куцая Быстрый ГЦ, горутины с вытесняющей многозадачностью, нативный бинарник без VM, есть ансейф, так что при желании можно и 2 указателя сложить. По первым двум пунктам только Эрланг может чем-то подобным похвастаться. Если бы не хуевый дизайн языка, то вообще был бы топ язык для прикладных приложений.
>>2634002 Ну если совсем без траллинга, то в целом я согласен. Но я про куцесть скорее про либы писал - их все-таки значительно меньше и они более худшего качества, чем елсевере.
</совсембезтроллинга> Да и к тому же размер бинарников у го и граальвм почти одинаковый, а если не видно разницы, то зачем жрать ГОвно?
>>2634478 Потому что go.sum может показывать несколько версий сразу, например если ты используешь third-party пекейджы, потому лучше смотреть только в go.mod
>>2634016 >Да и к тому же размер бинарников у го и граальвм почти одинаковый, а если не видно разницы, то зачем жрать ГОвно? Если лум и правда реализует все обещанные фичи, то может и правда будет конкуренция.
С другой стороны многих Го подкупает кажущейся простотой. до того самого момента, пока проект не разрастётся и простота не начнет мешать.
>>2634506 че ты мне тут корявого лепишь? Что тут произошло: Секурити-офицеры сначала родили какую-то машинку, но потом обосрались и потом откатили свои ахуенные истории.
>>2634720 Буквально коммент депендабота > go.sum files are not lock files but a log of all packages downloaded by Go when building a project. They may include multiple versions of a dependency, which may result in false positive Dependabot alerts for a vulnerable version that isn't actually used in the project.
>>2634996 >Никакого симпл димпл в голанге и близко нет, такое же минное поле из костылей, как и кресты, просто по объему меньше. Го легок для чтения, с ним практически никогда не возникает вопросов "что эта функция делает" и "как реализовать эту функцию" всё примитивно и прямолинейно. Просто берёшь и кодишь. Много кодишь потому что язык многословней даже Джавы.
>>2635771 Да. Тут большой плюс в гошке, что можно просто лазить по искодникам используемых пакетов они легко читаются. Не в пример даже Ларавелю какому-нибудь с его фасадами. Хер пойми откуда он что берет и куда перекладывает... Только дебагером.
>>2635778 Хорошо что деды которые гошку проектировали не стали туда макросы пихать как в своей любимой сишке. Или им зумер начальник из гугла запретил это делать.
>>2635771 >Го легок для чтения Язык не может быть "легок" или "сложен" для чтения. Легко или сложно читать может быть конкретный код. На любом языке можно написать как трудный для понимания код, так и легкий для понимания код.
>>2635941 Коректность не должна превращаться в шизу, игнорируя подразумеваемый контекст. Обсуждается средняя температура по больнице - читабельность языка. Пока ты не устроишься на проект, тебе его никто не даст почитать. Выберешь трудночитаемый язык - придется либо тянуть лямку, либо бегать от проекта к проекту теряя время на испытательном сроке.
>>2636130 >если весь/почти весь код, написанный на нём, легок для чтения Ну да, а если я закину на жидхаб 9000 тонн говнокода на языкнейм, то это сразу магически изменит собственные качества языкнейма. Давайте-ка без вот этой глупой гуманитарщины, язык - это формальная система.
>>2636149 >Ну да, а если я закину на жидхаб 9000 тонн говнокода на языкнейм, то это сразу магически изменит собственные качества языкнейма strawman >Давайте-ка без вот этой глупой гуманитарщины, язык - это формальная система это дискас на форуме где принят разговорный стиль переписки, алё. доебываться до того, что "кипит не чайник, кипит вода в чайнике" это уровень б или уже выше?
>>2636759 чтобы что? это не const. назови метод нормально и всем будет понятно, что он ресивер не меняет. в местах вызова все равно в 99% случаев не видно какой ресивер, разве что когда в интерфейс пытаешься положить
Более того, гарантированно чистые функции - это карго культ для фанатиков.
За исключением 0.0001% случаев, где действительно нужна формальная верификация. Но и там в систему типов это тащить необязательно. Алсо, напоминаю про unsafePerformIO; так что там, хаскель с кого карго-культирует?
>>2636742 >быстрее Ты скозал? Процессору похуй, выделять 4 байта на указатель или 16 на структуру, будет одинаково быстро. (Кроме редких моментов с очень большими структурами, ОЧЕНЬ)
Во всем мире принято ставить указатель в принимаемый тип только основываясь на то, будет ли он изменяться внутри или нет
>>2636978 Скачай сам го, а проект можно открыть в любом тестовом редакторе с подсветкой синтаксиса. Самая популярная среда - VS Code, ещё есть GoLand, но она платная.
>джавовые стримы спизжены с linq Какие же шарперы тупые, это пиздец просто! Общая CS эрудиция отсутствует как класс. Стримы в джаве чисто библиотечная вещь, никаких новых языковых конструкций в нем нет. В отличии от linq который сахар на сахаре, с сахарным сиропом. А сама идея идет из функциональщиных языков, мэп-редьюс, вот это все.
>>2637114 Оно не только нечитабельное, оно еще и медленное и нетипобезопасное. Типичный ГОвнокод тащем-то.
>Какие же шарперы тупые, это пиздец просто! При этом сам шарп\дотнет ресерчат довольно крутые чуваки, у них там и эфшарп, и приблуды для формальных доказательств, да и в целом рнд сильнейший. Такая вот ирония.
>>2636750 Джавовые стримы основаны в первую очередь на стандартной библиотеке кложи, т.к. главный архитектор джавы слегка фанбоит по кложе. Но в целом это все известные чуть ли не с 80-ых паттерны ФП.
>>2614678 (OP) Если легаси хуитка, которая деплоится в несколько инстансов и отвечает по REST API. Только один инстанс может обработать запрос от клиента. Остальные откидывают кастомную жысонину, мол "не могу обработать". Типа мастер есть. Вот как лучше всего писать клиент к такой ебанине, если известны адреса каждого инстанса? Или это можно решить на уровне инфраструктуры и спрятать все это говно за какой-нибудь хитрой проксей?
>>2638184 а нахуй они так сделали? >Вот как лучше всего писать клиент к такой ебанине, если известны адреса каждого инстанса ну просто делаешь обертку для хттп.клиента (или в него кастомный транспорт закидываешь, который тупо обертка над дефолтным с логикой фейловера). если запрос фейлится, то идешь раунд робином, пока один из адресов не ответит. если ответил, то дефолтишься на него. >Или это можно решить на уровне инфраструктуры и спрятать все это говно за какой-нибудь хитрой проксей? а хули они так не сделали?
>>2638212 Не хочу велосипедить клиент, да еще и такую хуету писать с перебором. Хотелось бы это решить как-то изящнее. Изначально все писали долбаебы-студенты, которых наняли за копейки.
Кому-нибудь удалось написать свой веб-сервер? Ну не просто, который отдаёт всем хелловорлд, а полноценный, который можно использовать для написания коммерческих веб-приложений. Или всё-таки никто сам такое не пишет, а используют готовые фреймворки как в других языках?
>>2638662 Ты путаешь веб-сервер, который сидит жопой в интернет и в современных условиях работает реверс проксей, и аппликейшен сервер, который уже работает с твоим приложением. Писать самому второй, а тем более первый это бессмысленная задача, потому что их дохуя и они написаны и вылизаны людьми поумнее тебя.
>>2638647 >Кому-нибудь удалось написать свой веб-сервер? Ну не просто, который отдаёт всем хелловорлд, а полноценный, который можно использовать для написания коммерческих веб-приложений разработчикам го))
Сейчас читаю книжку Адама Фримана Pro Go и дошёл, где он начал писать платформу для своего онлайн-магазина. Если до этого всё было понятно, то вот когда он начал заворачивать многослойные сервисы, то у меня мозг отключился. Так реально пишут или это он превращает голанг в асп.нет со всякими внедрениями зависимостей? Я вот не понимаю, нафига городить такую хренотень, чтобы потом в одном месте написать одну строчку вместо двух? Типа глядите как классно: я могу пихать в сервисы любой тип, а он там сам всё раскрутит и создаст.
>>2638845 >Adam Freeman is an experienced IT professional who has held senior positions in a range of companies, most recently serving as chief technology officer and chief operating officer of a global bank. Now retired, he spends his time writing у челика жава головного мозга, не суди строго
>>2638910 ну и челик который ревьюит просто картина маслом >senior consultant and a senior analyst/developer using Microsoft technologies, a Microsoft Certified Solution Developer for .NET, a Microsoft Certified Application Developer for .NET, a Microsoft Certified Professional
>>2638845 >Сейчас читаю книжку Адама Фримана Pro Go >Apress Чел... Книгами этого издательства только подтираться или на растопку печки. Читай книги от Manning, O'Reilly или хотя бы The Pragmatic Bookshelf.
>>2637508 >При этом сам шарп\дотнет ресерчат довольно крутые чуваки, у них там и эфшарп, и приблуды для формальных доказательств, да и в целом рнд сильнейший. Такая вот ирония. Нет никакой иронии, это всё закономерно. Хороший дизайн языка, это умение добавлять нужные фичи и не добавлять малополезные фичи, это умение выбирать такую реализацию, чтобы язык оставался консистентеым по стилю. Есть говей когда нужные фичи не добавляются до тех пор пока уже станет невозможно нормально разрабатывать на языке. Есть шарпвей когда в язык тащат все прикольные фичи которые можно реализовать. Проблема шарпа не в том что его авторы криворукие, а в том что у них нет чувства меры.
>>2639027 Нет никакой иронии, это всё закономерно. Хорошее свойство вещи типа N, это наличие X и отсутствие Y. В подтипе N1 типа N - X минимально, а в подтипе N2 типа N - Y максимально. Проблема N2 в том что производитель N2 добавил слишком много Y.
>>2639190 >Ну зато там есть Blazor и можно написать фронт на сишарпе, а на голанге так нельзя. Говно какое-то. Или уж делать нормальный десктоп или не ебать мозг и делать на базе Электрона и веб технологий, главное преимущество которого это возможность реюзать 99% кода для веб версии и независимость от бекенда. А так GWT для C# получается.
>>2639287 >не знаю, по мне так в шарпе не так уж и много лишнего, с чувством меры все в порядке. 1. LINQ это совершенно чужеродная с т.з. синтаксиса конструкция. Да еще неочевидно как работающая - как понять как будет делаться джоин 5 коллекций? 2. async/await - создает специальный класс async функций которые можно вызывать только из async функций или специальным образом. В Го можно любуй функцию запустить как горотину там есть вопросы с возвратом ответа, но все решаемо. А теперь этого мало, надо виртуальные треды делать. 3. Фич много, как правило есть больше одного способа реализовать фичу, команде приходится договариваться об общих подходах.
>>2639448 Смотри, чтобы найти работу на расте, нужно быть умненьким. Раз ты задаешь такие вопросы, то вполне очевидно, что ты тупенький. Поэтому если возьмешься за раст, то никогда не найдешь работу, а вот с го у тебя какие-то шансы все-таки есть, ибо го - язык для говнокодинга.
>>2638212 >а нахуй они так сделали? Вот у вас есть контроллер, который обрабатывает поступающие запросы. На каждый запрос он получает из параметров инстанс переменную, например "@var". Её значение уникально для каждого запроса. Вот так приложение выполняет один и тот же код, но для разных входящих данных. При дефолтных настройках вашего сервера, запросы встают в очередь и выполняются последовательно. Но если нагрузка начинает превышать возможности такого решения, то можно начать запускать приложение в нескольких инстансах. Это подразумевает выполнение одного и тоже кода в нескольких процессах (воркеры) или даже на разных серверах. Пример: сервер распределяющий нагрузку (1 сервер) разделяет запросы на несколько инстансов (n серверов), где запущено одно и тоже приложение, но они все обращаются к одной базе (1 сервер).
>>2640637 Ты не понял. У тебя N инстансов одного сервиса. Только один из них может обрабатывать запросы по REST API. Остальные тебе вернут ошибку. Т.е. там роли у такого "кластера", где один мастер, который все запросы обрабатывает.
Вкатываюсь в го. Поясните по хадркору, как жить без дженерик методов? Вот как - как жить? Плодить копипасту? Вот у меня есть задача перекладыания сущностей их источника в хранилище. Ну типичная же, да? Ну не хочу я писать два десятка вариантов кода, отличающихся именем сущности. Казалось бы, Родина дала тебе дженерики! Но нихуя. Я хочу использовать DI и через него получать базу, логгер и прочую хуйню. А как мне таскать DI контейнер? Глобальной переменной, что ли?
Кажется, я понял дао Го. Дженерики не нужны, потому что всё равно типобезопасоности нет. Тупо заворачиваем всё в структуры interface{} и не лоъматим бабушку :(
Ты дрянь, лишь это слово псособно обидеть. Ты дрянь, я не могу тебя любить, но не хочу ненавидеть. Ты не тот инструмент, на котором я способен писать.
type TEntityDTD interface { ContractorDTO } type TEntityXML interface { ContractorXML } type Entity[D TEntityDTD, X TEntityXML] interface { getXML() X dtoMapper() D } Теперь попытаемся имплементировать метод. func (e Entity[ContractorDTO, ContractorXML]) getXML() ContractorXML { return &ContractorXML{} }
Invalid receiver type Entity[ContractorDTO, ContractorXML] (Entity[ContractorDTO, ContractorXML] is an interface type)
>>2641919 >Плодить копипасту? Да, это же ГО - язык для ГОвнокода. Но дженерики (кастрированные) уже джва релиза назад завезли - теперь осталось только переписать все библиотеки, ура.
>Вот у меня есть задача перекладыания сущностей их источника в хранилище. Если хочешь заморочиться, то можешь написать кодогенератор (см. go generate). Но разумеется так как мы в ГО треде, а ГО - это язык для ГОвнокода, тебе придется прям парсить и генерить текстовые файлы, т.к. про метапрограммирование и лисп-макросы роб пайк не слышал инб4: слышал но у него гой-вей!!1. Поэтому смотри сам, что проще.
В целом, при написании го главное поменять отношение. Не пытайся сделать "правильно" или "красиво", ну или "эффективно". Нахреначь как попало чтоб оно хоть как-то работало, притом поддержку желательно скинуть другой команде или свеженанятому джуну. Если какой-нибудь хер из другой команды решит на тебя позалупаться, то отвечай, что он хуй и ничего не понимает, а твой код соответствует the go way.
>>2642570 > дженерики (кастрированные) уже джва релиза назад завезли За два дня я сделал вывод, что дженерики в го завезли примерно так же, как альтернативную военную службу в России. Ты должен пожалеть об этом.
>>2643438 Давай начнём с дженерик методов. Продолжим мапой без interface{}. Я вообще не понимаю, почему го получил такую бешеную популярность. Что в нём суперкрутого? Лаконичный синтаксис? На да, на том же шарпе это пишется более жирно. Но блин, я ещё не встречал языка, на котором я должен неделю думать, как мне выразить мысль, который ставит мне палки в колёса - туда нельзя, сюда нельзя, но если вы возьмёте void, oops I mean interface{}. Блядь, в 21 веке использовать void! Дийкстра в гробу вертится, замедляя вращение Земли.
>>2643498 Я сегодня про горутины и замыкания читал. Там вообще вынос мозга! К примеру, счётчик цикла горутина неправильно читает, а вот если его присвоить переменной внутри цикла, то уже всё норм.
>>2642624 Ты не понимаешь. Это го-вей. Сейчас все перепишут весь код на кастрированные дженерики, потом еще через 5-10 лет роб пайк прочитает какой-нибудь пейпер про тайпклассы и добавит дженерик методы, чтобы все переписали весь код еще раз. Кодинг крутится, лавешки мутятся, ВВП растет. Смекаешь? Понимать надо.
>>2643498 >Я вообще не понимаю, почему го получил такую бешеную популярность. Ты не поверишь, но примерно 90% ПРОГРАММИСТОВ оценивают новый язык ровно по двум вещам: 1) синтаксису на примере хелловорлда 2) логотипу
Так что пиар гугла + логотип. Буквально это. Такая вот индустрия, добро пожаловать. справедливости ради еще рантайм с гц и ксп из коробки в 2008 году
>>2643505 >счётчик цикла горутина неправильно читает, а вот если его присвоить переменной внутри цикла это ты еще интерфейсы с нил не сравнивал Ты не понимаешь. Го - это простой язык. Го-вей - это ПРОСТОТА. Ну мне так чувак в пинджаке по телеютубу сказал. А ты кто такой? Вот он в гугле работает, а ты русский фашист хуесос с двачей.
>>2643509 Не могу вспомнить, кто сказал, что простые вещи должны быть простыми, а сложные - возможными. Вот го отлично справляется с первым. И никак - со вторым. МЕня вымораживают коллекции с interface{}. Меня вообще вымораживают здешние коллекции - они НЕ ПРОСТЫЕ. Они простые в Perl, Они слишком простые в PHP. Они достаточно удобные в дабе и шарпе. Они блать ебанутые в go. Интерфейсы вроде бы есть, но я пока не познал их дао. Но в стандартной библиотекте их нет. Нет никого ILogger или IDbCOntext. Просто в голове не укладывается - вот этим люди обмазываются и просят ещё!
>>2643533 >Вот го отлично справляется с первым. >десять синтаксисов на каждую фичу >неоднозначный парсинг после введение дженериков >тонны подводных камней, некоторые из которых уже упомянуты выше по треду >вообще лень опять перечислять очевидное Нет, не справляется. Вот scheme - справляется, например. Да даже простихоспати луа какая-нибудь и то справляется
>ILogger >IDbCOntext А зачем ставить букву I перед названием интерфейса иметь это в стандартной библиотеке?
>>2624966 За аж неделю изучения языка пришел к выводу, что в го di не имеет смысла. В нем не принят полиморфизм, не принято делать стандартные абстрактные классы или интерфейсы. Без них di я вляется изощрённым способом почесать левой пяткой правое ухо.
>>2624966 не то чтобы совсем нинужно, но вообще нинужно. если там бля ну хендлеры ходят в сервисы, сервисы ходят в репозитории, репозитории ходят в бд, то инжектор говорит о чем? о том, что ребята скоро будут распиливать свой монолит, т.к. дохуя говна завезли и пытаются костылями скрыть сложность погружения в его код
>>2633783 >По возможности не пытайся >Вообще всегда присваивай результат как надо, хотя язык этого не требует явно
Охуенный дизайн языка. Просто охуенный. Делайте как надо, а как не надо не делайте, но мы вас не заставляем, можно делать и совсем наоборот и ИНОГДА это будет иметь смысл!
Как же коряво делается бизнес логика, такое ощущение, что ебу байты на сишке при этом не имея и доли сишных возможностей. Как будто язык предназначен только для ебли с сетью, что бы грузить бинарные жсоны.
>>2644598 Беттинг. Переписываем парочку компонентов с питона на го, что бы с сеткой быстро работало. Думали остальную часть тоже переписать, но когда дело дошло до описания доменных моделей и работы с ними от идеи резко отказались.
>>2644272 Ты не путай, в рабочем коде слои изолируются через интерфейсы. То, что в стдлибе ничего не выведено на интерфейсы - так это просто разрабы мудаки, но это ж не повод за ними повторять плохое.
>>2644596 >ебу байты на сишке при этом не имея и доли сишных возможностей Ты только что суть.
>>2644598 Если чисто ради изучения чего-то нового, то запили лучше на кложе\хаскеле\эликсире. Если надо просто запилить побыстрее и чтоб работало, то бери то, что знаешь лучше всего, очевидно же.
>>2639443 >async/await - создает специальный класс async функций которые можно вызывать только из async функций или специальным образом Какое же говно этот ваш Шарп Минуточку...>>2639443 >В Го можно любуй функцию запустить как горотину - специальным образом Ах, какой же это охуенный язык!
>>2645056 >компилируемый + горутины из коробки + простой в освоении по сравнению с растом Таких языков десятки, если не сотни. Но у них нет финансовой поддержки гугла. и няффки-логотипа :333
>>2643498 Подожди, но это хуёвый ответ. Я тебя спрашиваю "что тебе не нравится в гошных дженериках?". Ты мне отвечаешь "в го нет мап без any" (кстати так и не понял о чём это ты) и дальше накидываешь про сам язык. В итоге, ты пиздел на гошные дженерики, поясняй за них, что тебя в них не устраивает.
>>2643505 Ты глупенький что ли? Это называется замыкание и происходит во многих разных языках, в том же js (ну со скидкой на то, что он однопоточный). Если ты используешь в горутине какую-то переменную, а потом эта переменная изменится - то да, она изменится внутри горутины тоже. Абсолютно валидное поведение. Не хочешь, чтобы она менялась - то не суй в горутину то, что меняется снаружи.
>>2645258 Нельзя использовать в методах, нельзя использовать как уже говорили выше в мапах/слайсах, это сырое говно. Интерфейсы тоже не лучше, нельзя например сделать интерфейс с типами как параметр функций (нахуя тогда оно надо?) и это только то, что пришло сразу в голову, покопаться - еще больше пиздеца будет
>>2645464 Я хочу хранить в мапе MyType. Я просто хочу хранить в мапе MyType. Алсо, почему го - единственный ЯВУ, в котором я должен думать о ёмкости коллекции? Почему в го нет ArrayList?
>>2645464 >С дженериками и мапами кажется в гошке все ок. Чтоб было ок, мапы должны быть не накостыленным встроенным типом, а обыкновенным Map[k,v], где к - компарабл.
>>2645482 Дело не в дженериках, а в том, что методы для интерфейсов не нужно имплементить. Их имплементят уже те, кто этот интерфейс хочет реализовать. Так что дженерик интерфейсы в качестве ресивера особо бесполезны имхо.
Алсо в 1.20 добавилась неочевидность: P any и просто any это разные вещи. Для обычного any, (который на самом деле interface{}), == определен. А для типа, который ограничили any, уже == не определен. Вот такая хуйня.
>>2645546 Так во всех языках, не? Интерфейс это просто набор методов, которые нужно заимплементить, чтобы реализовать этот интерфейс. По сути просто контракт, что такие-то методы реализованы у всех, кто заимплементил этот интерфейс.
Причем тут копипаста? Или ты про аналог default методов в джаве, которые хуй пойми зачем нужны?
>>2645546 Или про абстрактные классы, которые уже у себя имплементят часть поведения? От абстрактных классов решили отказаться. Даже в ООП языках их почти не используют сейчас.
>>2645512 Хорошо блять, смотри, у меня есть свой тип, у него есть дохуя методов, и мне нужна что бы метод например Add принимал в себя одновременно и int и float и еще какую то хуйню, а еще у меня есть соседний метод, который принимает в себя только float или int, как реализовать? С any - идешь нахуй
>>2645603 Как в джаве такое сделать я уже не помню, не уверен, что там такое вообще можно было сделать, мб только если отказаться от дженериков и нагородить что-нибудь с иерархией наследования. Про С++ хз, там наверное возможно поебаться с шаблонами и сделать как надо.
А нужны ли вообще дженерики? Для операций со структурами данных и для построения штук вроде Stream API нужны. А в остальных случаях? Сколько не видел продуктового кода на го, нигде не видел дженерики или чтобы они были сильно нужны.
>>2645635 >нигде не видел дженерики Может потому что они релизнулись в недавних апдейтах??? Мало того что проект с ними писать нужно, так они еще и не допиленные, так еще и самих разработчиков нужно научить использовать их
>>2645635 Если у тебя статическая система типов, то она должна поддерживать параметрический полиморфизм, иначе это не система типов, а говно. Иначе ты не сможешь тайпчекнуть map :: (a -> b), [ a ] -> [ b ] или тривиально id :: a -> a.
Если у тебя язык, рассчитанный на хоть какое-то практическое применение, то тебе нужно решать expression problem[1] и поддерживать рантаймовый ад-хок полиморфизм, иначе не получится никакой модульной разработки. Это так или иначе приводит тебя к тайпклассам (а-ля х-ль) либо модулям\функторам (а-ля окамл), либо протоколам\клос в динамических языках. Это все если что было уже достаточно хорошо известно и исследовано в 90-ые. но читать вадлера - это не го-вей
Ну а дальше ты можешь накручивать систему типов, чтобы разрешить компилировать более широкий класс корректных программ, но за это придется трейдоффнуться сложностью системы типов, а в некоторых случаях еще и выводимостью типов.
Я давно так не рофлил. Кучу времени всякие долбоебы пиздели, что с го что-то не так. И в итоге стоило только начать предметный разговор, как выясняется что.. Вполне всё так. И дженерики рабочие, и мапы делать можно, и shadowing нормальный, и замыкание такие же, как и везде. Очевидно, что здесь, как во всяких чатах в телеге, тусуется куча сомнительных личностей околоджуновского уровня, которые с уверенным видом вбрасывают в треды своё неквалифицированное мнение и самое главное, что может сделать нормальный человек - их не слушать.
>>2646016 Я просто не восьмибитный школьник, страдающий максимализмом и тем более не ведусь на "моду" любить или не любить какие-то языки.
Идеальных языков не существует и в какой ты не ткнешь пальцем, найдешь трешняк. Джава пиздец жирная с уродливой жирной экосистемой поверх спринга, с++ угроблен кучей магии и ансейф вещей прям в стдлибе и какими-то академическими уебанами в комитете, js тащит за собой какой-то адский груз легаси из плохих решений в прошлом, ещё и оборачивая его в миллион библиотек поверх других библиотек, ts пытается прибирать за js c переменным успехом, php однопоточный, ruby с python тормозные и не умеют в нормальную многопоточность, c# вызывает диабет, scala ещё более жирная чем джава и к ней есть большие вопросы по поводу принятых там подходов, и тд и тп один rust няшечка и идеален. К го тоже есть вопросы, да. Просто нужно держать это всё в голове, что мир не черно белый и у всего есть много неочевидных плюсов и минусов. Та же гошная "простота", которую принято хейтить, иногда реально решает и к примеру когда пытаешься продраться сквозь 100500 слоёв абстракции в джавовом монолите, который ещё и стартует несколько минут, невольно думаешь, что всё могло быть иначе. И тупой хейт языка просто показывает вас дебилами с упрощенной картиной мира в голове.
>>2646040 И тем более странно делать тупые вбросы про большие или маленькие переменные (это блять условность синтаксиса, как $ в пхп. Вам то какая разница чего печатать), мапы (нормально работают, запихать можно почти всё, что угодно и в реальной жизни проблем с этим вообще нет), дженерики (ну разве что дженерик методов пока не бывает и то в новых версиях их обещают. и в стд либ обещают внедрить, просто не сразу) и тд и тп. Когда вместо нормальных аргументов вида "вот это можно было сделать лучше вот так вот" читаешь что-то настольно непродуманное, хочется закрыть тред и окончательно поставить крест на людях, раз они думать не хотят. И то часто даже по "разумным" комментариям видно, что анон просто хочет, чтобы го был "как жава" и не понимает, почему что-то сделано так, а не иначе и что здесь был трейдофф и разработчики языка пожертвовали одним в пользу другого. Кстати напоминаю, что в джаве джереники сделаны просто стиранием типов и это самое уёбищное решение на свете.
короче бля им надо было просто женерик методы сделать, но не ебаться с их поддержкой в интерфейсах. просто бля писать такого метода нет в интерфейсе. ну и всё, тогда бы люди думали о том как проблему интерфейсов решить, а не тупо жаловались что не могут метод написать.
Почему они не догадались добавить в язык тип decimal? Ведь предполагается работа с базами данных напрямую, а адекватного типа, чтобы запихать денежное значение - нет.
>>2646510 Не получится. Дженерики не решают эту проблему и не должны решать. Дженерики как раз сделаны, чтобы не допускать такого, то есть наоборот запрещают подобные действия.
Если тебе нужно одновременно держать значения разных типов, то нужно interface{} использовать или any. Но это может приводить к ошибкам типобезопасноти.
Вот есть regex.FindStringIndex() . Что он возвращает? Нет, не (int, int), не угадали. Нет не int[2], опять не угадали. Он возвращает - []int в котором обещают положить 2 элемента. Гении блядь, просто гении!
А ещё, по дефолту методы regex работает с байтами и надо добавлять суффикс String чтобы работать со строками.
>>2646830 > Он возвращает - []int в котором обещают положить 2 элемента Эта доёбка была бы почти справедливой, если бы я не знал, что там под капотом используется общий для всех регулярок метод (re (*Regexp).doExecute , который всегда возвращает слайс (потому что он используется например в FindAll, когда вхождений может быть неопределенно много) и раскукоживать этот слайс на две отдельные переменные означало бы выделять дополнительную память. Захочешь - сам из слайса достанешь. Но доебаться на двачах проще, чем самому заглянуть в код и разобраться, почему что-то сделано так, а не иначе, не так ли?
> А ещё, по дефолту методы regex работает с байтами и надо добавлять суффикс String чтобы работать со строками. В целом нормальная тема, строки и слайсы байт это разные типы и всегда терпеть оверхед на конверсии не хотелось бы.
>>2646617 Вот я получил из мапы any. На самом деле это параметризованный интерфейс. Ну то есть внутри конкретная структура, с конкретными типами, и она знает, какие у неё типа, и её методы отвечают интерфейсу. Прежметно. type IEnitity[X, D] interface { GetX() X GetD() D } Есть структура, которая под ним лежит, есть конкретные X и D. Есть myMap map[string]any, куда сложены экземпляры. Из myMap очевидно достчётся any. Как из него сделать IEntity?
>>2646003 Да, тут какие-то залетные школоло несут какую-то хуйню, которую без поллитры не разберешь, но я против них не воюю, воюю только в правильную сторону. Про дженерики (типопараметры в методах, которые обещали еще к 19-ой версии запиить) тебе уже пояснили, про мапы тоже.
>>2646040 >Та же гошная "простота", которую принято хейтить Так хейтят не "простоту", а тот факт, что пиздеж о некоей "простоте" - это именно что пиздеж.
И за то, что авторы языка полностью проигнорировали весь прогресс в комплюктер ссайенс с 70-ых годов, и вместо того чтобы просто зделоть нормально зделоли так, что теперь всем еще 30 лет за ними чистить вилкой придется.
>>2646781 В случае слайсов - нет. В случае мап - есть, второй вариант сегфолтнется при использовании. Почему? Потому что go is a simple language, если уж добавляем три разных способа написать одно и то же - то надо обязательно добавить еще парочку корнер кейсов, которые крашатся в рантайме. Ну чтоб жизнь медом не казалась.
>>2646881 >В случае слайсов - нет. В случае мап - есть, второй вариант сегфолтнется при использовании так если ты в nil слайс полезешь по индексу как в мапу то аналогично схватишь, тут магия только внутри аппенда
>>2646854 Эта абстракция была бы почти абстракцией, если бы не текла.
кстати, если уж экономишь выделение двух интов на стеке, то не забудь руками копипастить код этой функции каждый раз вместо ее вызова, ведь го - это про производительность и ПРОСТОТУ
>>2646886 >не забудь руками копипастить код этой функции каждый раз вместо ее вызова, ведь го - это про производительность и ПРОСТОТУ а инлайнер в гошке чем не угодил то
>>2646885 Эм, нет. По какому индексу, если слайс пустой? Без разницы, инициализирован он нилом или собственно пустым слайсом, - он все равно пустой и будет out of bounds. Это не то.
В говномапах добавление нового элемента делается синтаксисом m[k] = v. В слайсах добавление нового элемента делается аппендом. В первом случае мы крашимся в рантайме от нил, во втором нет. Потому что ПРОСТОТА
>>2646874 Нихера. У ьеня X и D - обобщённые интерфейсы. И IDE мне говорит, что я должен их вынести в сигнатуру функции, типа определить. А мне нахуй не надо их здесь определять!
>>2646860 >я получил из мапы any Не нужно делать мапы map[X]any - это плохой паттерн. Нахуя ты так делаешь? Так не стоит делать.
И что за структура внутри, покажи ее в треде? Параметризованный интерфейс я увидел. А что за типы X и D, какие у них должны быть ограничения? Так нихуя и не понял что тебе нужно.
Складывать как значения в мапу структуры разного типа, но которые один и тот же интерфейс имплементят?
>>2646902 > func accounting[X, D any]() Вот это мне не нужно. Тем более что у меня не any, а вполне настоящие интерфейсы. То есть я был бы и не против, НО ЗДЕСЬ У МЕНЯ МЕТОД!!!
>>2646915 >засунуть в мапу что-то неоднородное Так не нужно делать. Не стоит хранить в мапах неоднородные объекты. Если сильно нужно, то есть интерфейсы для такого.
>>2646976 Да, никак. Дженерики должны однозначно раскрываться во время компиляции. КТО СКАЗАЛ МАКРОСЫ? Я ЯСНО СЛЫШАЛ, КАК КТО-ТО СКАЗАЛ МАКРОСЫ! Надо как-то переписывать чтобы type switch использовать. Боролся со свитчем и пришёл к тому, что единственная альтернатива свитчу это свитч. Ебануться. Подходила к конфу первая четверть 21 века. За окном шёл дождь и рота красноармейцев.
Ну вот выдержка. https://go.dev/play/p/hs5rGn13eFU Я хотел в Handler получить объект из коллекции и вызвать у него методы. Объект получается в зависимости от сигнатуры. В РАНТАЙМЕ. На шарпе или яве это делается на раз-два.
И извини, но это просто адовый говнокод, и ты делаешь какую-то хуйню. Тебе вообще ненужны тут ни юнионы в констрейнтах, вообще ничего из того что ты наклал ненужно. Тебе достаточно полутора интерфейсов и одного тайп свича, все.
>>2647061 > тайп свича У меня уже был свитч. Я хотел избавиться от него. Я, сука, неделю от него пытаюсь избавиться. Я пишу без свичей на скриптовых языках, я пишу без свичей на строгих языках, и только го заставляет меня херачить простыни свичей. Как это говно стало популярным? Ради того, чтобы быстро класть быйтики в сокеты в 1000 потоков, люди готовы жрать говно?
>>2647070 Какие простыни? У тебя в пасте натурально целый экран говнокода с хуевой декомпозицией, который заменяется буквально тремя понятными строчками. Что конкретно ты хочешь сделать? Ты можешь нормально сформулировать техзадание? Или хотя бы запастить полный код?
>>2646854 >Эта доёбка была бы почти справедливой, если бы я не знал, что там под капотом используется общий для всех регулярок метод (re (*Regexp).doExecute , который всегда возвращает слайс (потому что он используется например в FindAll, когда вхождений может быть неопределенно много) и раскукоживать этот слайс на две отдельные переменные означало бы выделять дополнительную память. Захочешь - сам из слайса достанешь. >Но доебаться на двачах проще, чем самому заглянуть в код и разобраться, почему что-то сделано так, а не иначе, не так ли? Уж лучше бы молчал. 1. Уродский API остается уродским, даже если он сделан ради перформанса. Хотя конкретно тут перформансом и не пахнет, тут проблема в лени разрабов. 2. Положить 2 инта на стек, это пиздец какая дорогая операция. Ну а главное, что перед возвратом слайса там делается еще один слайсинг a[0:2] что создает на стеке те же пару интов. 3. Разрабам библиотеки насрать на перформанс, иначе бы они не использовали слайсы там где можно обойтись без них. У тебя на любой матч/файнд создается новый массив в куче, куда слайсятся результаты поиска. 4. В любом случае таким нано оптимизации, должны обязательно подкрепляться бенчмарками. Типа делаем кривой API потому что на реальных данных это дает +15% перформанса.
>В целом нормальная тема, строки и слайсы байт это разные типы и всегда терпеть оверхед на конверсии не хотелось бы. Проблема не в наличии методов работы с байтами, а в том что метод Find() работает с байтами, а не строками что было бы логичней. Т.к. поиск по строкам выполняется чаще, чем по байтам.
>>2646003 >что с го что-то не так Работа со строками, подход как в говяхе работает, если ты имплементируешь что-то низкоуровневое и нужна ебля с байтами. Для вебсервера заебись, для сервера приложения полное говно.
>>2647107 > Что конкретно ты хочешь сделать? Я хочу выводить типы в рантайме. К сожалению, Go is not designed to cover this kind of use case. Дженерики работоспособны только при условии, что рано или поздно ты руками свернёшь их в конкретный тип. Нахуй они тогда вообще нужны, я не понимаю.
>>2647422 >Я хочу выводить типы в рантайме Дженерики существуют на уровне компилятора, это не сущность рантайма. В рантайме работает рефлексия или тайп свитч.
>>2647422 >рано или поздно ты руками свернёшь их в конкретный тип Так и есть во всех языках, лол.
Дженерики по сути нужны для работы с коллекциями. Чтобы не пихать лишний раз interface{}, а взять и написать обобщенную реализацию условной сортировки или поиска в массиве. В клиентском коде дженерики скорее редкость, у нас на проекте ни в одном из сервисов они не используются кроме самописных библиотек.
В чем заключается твой кейс до сих пор не понятно. Можешь упростить и показать на более простых примерах, не захламляя код лишними переменными и структурами?
https://pkg.go.dev/os#File.ReadDir >func (File) ReadDir >func (File) Readdir >func (*File) Readdirnames Просто в голос! У дебилов кончились имена, хорошо что язык кейс сенсетив.
>>2647917 Что тебе ответить? Что ты дебс и не видишь различия меджу присваиванием и объявлением? И еще полистываешь вместо того, чтобы почитать в документации. В паскале приваивание x := 1 В голанге короткое объявление локальной переменной x := 1 x = 2
>>2648400 Каталог $GOPATH/bin — это место, где Go размещает двоичные файлы, компилируемые go install. Операционная система использует переменную среды $PATH для поиска двоичных приложений, которые могут выполняться без полного пути. Рекомендуется добавить этот каталог в глобальную переменную $PATH.
>>2648506 >go mod init имя_модуля ну тогда единственное удобство это то, что с настроенным гопатхом имя модуля само из названия папочек подтянется, когда ты их в гопатхе создаш
>>2648578 Делай то, что тебе кажется удобнее ей богу, это программирование, тут все пишут так, как они САМИ считают удобным и правильным, нету одного единого мнения, я всегда делаю мод инит и не ебу мозги
>>2648578 На текущий момент идиоматично размещать проект где хочешь ( обычно в /home/projects) и там инициализировать модуль через go mod init. Го модули это вообще де факто уже стандарт. Все штуки вида "размещать в $GOPATH) или не дай бог glide и dep - это всё устаревшие решения года времен года так 2017.
>>2648643 Как вы, школьники, меня заебали.. Откуда вас столько именно в этом треде? Ни в одном языке нет такого, чтобы всем было насрать на всё, кроме факта работы. В разных языках отличаются критерии правильности, вот и всё. Те же джависты больше ценят уровни абстракции и максимальный импакт минимальным количеством кода, а гошники - более явный код, по которому должно быть понятно, что и где происходит.
Как пишут веб-приложения? Вот, к примеру, я могу наделать хандлеров на каждый запрос вида: /list, /edit и т.п. А как обрабатывать запросы вида: /list/1, /edit/2 ? А что если мне надо отдельные функции на GET и POST запросы? Что-то совсем не догоняю как имеющимся функционалом это можно сделать.
>>2647422 >Я хочу выводить типы в рантайме Извини, но ты безграмотный долбоеб (такой же, как команда го). Иди читай, что такое "система типов", что такое "вывод типов", что такое "рантайм".
Извини, но ты обоссан и обосран. Не был бы твой менеджмент таким же безграмотным - тебя бы давно уволили.
>>2648400 Нет, все что связано с GOPATH - устарело и может быть проигнорировано. Просто команда разработки ГОвноланга не могла с самого начала сделать нормальную систему сборки, хотя абсолютно все им говорили, что они делают говно, и что нужно сразу сделать нормально, но они решили сперва сделать все через жопу, потом выждать лет 5, пока люди опубликуют в интернетах тысячи мануалов и туториалов с объяснением кривой системы сборки, а вот потом уже все-таки все поломать и сделать так, как им все предлагали сделать изначально. Потому что таков путь ГОвна, понимать надо. Гой-вей.
>>2649214 О, кстати! Анон, давай обсудим НЕЙМИНГ. Пост абсолютно нерелейтед, но ты мне напомнил. Вот у меня тоже всю жизнь папка с кодом называлась projects. Но я тут подумал, что во-первых это слишком длинное слово; во-вторых, у меня есть другая директория projects в другом месте, где лежат проекты, не связанные с кодом. Короче, как правильно назвать папку с кодом?
- dev - логично, кратко, красиво, но блин /dev означает другое, опять одно слово для двух вещей - code - но собственно код у меня лежит и в других местах, а здесь лежит именно мой код, ну точнее мои проекты, либо проекты в которых я принимаю и\или планирую принять какое-то участие - coding - логично, но англоспецифичные суффиксы это антипаттерн! - src - было бы неплохо, но получается дублирование из-за projectname/src, так что не вариант - ??? - какие еще есть варианты?
пойду репостну в линукс-тред
алсо ебать тебе бомбануло от правды о говноланге, хе-хе
>>2649214 >по которому должно быть понятно, что и где происходит читаешь простыни невнятной хуйни с паскале-си подобном синтаксисе, особенно в голос с массивов
Вот берёшь любой курс, книгу или серию видео на ютубе. Вначале говорят, что голанг такой крутой язык, что ему не нужны фреймворки. А когда дело доходит до написания реальных веб-приложений, то автор как бы невзначай говорит: ну а тут будем использовать такой-то фреймворк.
>>2650116 держу все проекты в src, включая свои/рабочи и рандомную хуйню с гитхаба не вижу ничего плохого в ~/src/github.com/golang/go/src/cmd/api/testdata/src
>>2650116 Борщехлёбность рассуждений зашкаливает. Знаешь, как выглядит путь к папке с проектами и серьёзных, деловых людей? Примерно так: >D:\По работе\Новая Папка\говно\github.com\golang\
Бомбящий неделю назад скуф на связи. Всё-таки получилось, я познал дао го-дженериков и интерфейсов. Хотя от свичей по-прежнему бомбит. А ещё бомбит, что структура помешается в интерфейс, и УКАХАТЕЛЬ НА СТРУКТУРУ прекрасно помещается в тот же самый интерфейс! Я опять чего-то не понимаю? Или это хвалёная простота языка, когда я не могу понятоь, передаю я в функцию изменяемое значение или неизменяемое?
>>2650935 Ты совсем не понимаешь что такое библиотека для роутинга имеющая буквально пару функций и ебучий фреймворк на миллиард абстракций, структур и разных функций? Там даже тысячи строк нету в ней
>>2650891 выебоны с велью ресиверами это просто повод выстрелить себе в ногу, когда какой-нибудь хуй через полгода добавит в структуру слайсик/мутекс и решит аппендить/залочить внутри этого метода
>>2650891 >Или это хвалёная простота языка Да, это оно самое. гой-вей Есть еще корнер кейзы с имплементацией интерфейса, если ты миксуешь поинтер и валюе ресиверы, поэтому лучше всегда использовать только поинтер ресиверы. ПРОСТОТА
> for х := range someSlice { Какого хуя х это индекс, а не значение? Кому в здравом уме нужны только индексы элементов массива? Это же совершенно неюзабельная хуйня!
>>2651573 По индексу можно получить и значения, а переменная массива к тому же будет лишь копией значения и следовательно изменить его не сможешь. Так что, индекс (ключ) > значения.
>>2651647 >По индексу можно получить и значения, а переменная массива к тому же будет лишь копией значения и следовательно изменить его не сможешь. Так что, индекс (ключ) > значения Ёбаный стыд, кто на говне пишет. 1. Какой только хуеты не придумают, лишь бы оправдать маразм архитекторов языка. 2. Не могу в простейшую логику ну или вообще язык не знают for _, val := range someSlice { ВНЕЗАПНО, тоже создаёт копию значения слайса.
>>2651272 > если ты миксуешь поинтер и валюе ресиверы А что будет? Я, кстати, избавился от any. Правда, пришлось всё на свете обмазать дженериками. С any у меня получалось, что я возвращал указатель, а присвивал значению. И оно волшебным образом кастовалось. Сидел целый еднь старательно убивал волшебство.
Кстати о волшебстве. Я что-то не понял, в каких случая их указателя можно вызывать методы напрямую, а в каких его надо разыменовывать.
В целом - кошмар, в том плане, что без IDE я бы не разобрался. Я с ней-то по полдня сидел глядел на ошибку.
>>2651573 Я сегодня изучал вопрос, как сделать N итераций. Просто N итераций. for ()..N). Официальный ответ Пайка - надо использовать трехчленный for. Вы не понимаете, это удобнее, чем for (1..N).
>>2651800 >ВНЕЗАПНО, тоже создаёт копию значения слайса Ну так тебе и написали, что поэтому изменить ты его не сможешь. А имея индекс этого элемента - сможешь. Ей-богу, я воюю против ГОвна на одной стороне со школьниками-дебилоидами - лучше б вы молчали.
>>2651573 В нормальном языке не нужно было бы городить кучу специальных случаев в компиляторе, а просто была бы функция, возвращающая итератор по множеству ключей для данной последовательности.
>>2651857 >А что будет? это >оно волшебным образом кастовалось если у тебя поинтер ресивер, то реализация для валюе ресивера подставляется автоматически, а если у тебя валюе ресивер, но на коллсайте используется поинтерресивер, то ты словишь ошибку нот имплементед (особливо доставляет вкупе с дактайпингом), а если у тебя микс поинтер и валюе ресиверов, то еще веселее; энивей во всех стайлгайдах и емнип официальных доках рекомендуется не миксовать одно с другим и использовать поинтер ресиверыГОЙ-ВЕЙ
Вообще, забавно, насколько говнофанатики промытые зомби - буквально весь язык состоит из корнер кейсов, магических неочевидных вещей и прочей аморальной хуиты. Но чувак в пинджаке им сказал про ПРОСТОТУ - и тысячи хомячков до сих пор это повторяют. Ведь он же в ГУГЛЕ рабоатет, понимать надо, вумный значит дофига.
>в каких случая их указателя можно вызывать методы напрямую, а в каких его надо разыменовывать. Один уровень индирекшона разыменовывается автоматически
>>2652248 >в целом это конечно сигнализирует о том Что некоторые языки заботятся об удобстве программиста, а некоторые объясняют, для чего именно язык предназначен.
>>2652233 >В нормальном языке не нужно было бы городить кучу специальных случаев в компиляторе, а просто была бы функция, возвращающая итератор по множеству ключей для данной последовательности. Кстати, почему не сделали итераторы как в пистоне? Реализуешь определенный интерфейс и итерируешься сколько хочешь без ебли с каналами
>>2652261 >Что некоторые языки заботятся об удобстве программиста Удобство программиста - в хороших базовых абстракциях, на которых построен язык. А не в том, есть там какой-то минорный синтаксический сахар или нет (один хуй что то, что другое генерится автодополнением из шаблона по нажатию двух клавиш).
>>2652335 Потому что... задние ряды уже начали догадываться... потому что... %%ГОЙ-ВЕЙ!!!11 ПРЫСТОТА, ПЫНИМАИШ?!!111 ГОЙВЕЙПРОСТАТАяидиотубейтеменяктонибудь
>>2652403 Дохуя итераций обычно на пустом месте не появляются. У тебя скорее всего есть уже какая-то коллекция, по которой ты итерируешь. Я про другое. Тете для простого учебного примера надо сделать 10 итераций. Или тебе надо скинуть первые десять строк файла. Или что-то такое. >>2652364 Не знаю, чего все так не любят сахар. Вот в сях квадратные скобки это сахар? Сахар. Неужели удобнее писать (pointer+5sizeof(int)) ?
>>2652403 Не уверен на 100% насчет шарпа на 95% впрочем уверен, но нормальные стрим апи (или трансдьюсеры например) не создают новый массив при range(1,10), а просто возвращают стейтфул итератор, который с константной памятью йилдит значения в указанном промежутке. Учите матчасть, товарищи!
>>2652581 Я не про любовь\нелюбовь, а про то, что доебка анона АРРЯЯЯ НАДО ПИСАТЬ i:=0; i<n; i++ вместо i:=(0..n) - абсолютно тупая и демонстрирует скорее его скудоумие, чем скудоумие создателей ГОвняшки (особенно на фоне того факта, что есть примерно 9000 других аспектов, действительно демонстрирующих скудоумие создателей ГОвняшки, и притом гораздо более фактурно и красочно).
>>2615001 Концептуально правильное решение - open + first-class records, в примитивных низкоуровневых языках типа го и хаскеля такое невозможно.
Концептуально неправильное, но терпимое решение - id : Maybe int. Применяется по дефолту в большинстве языков со статической проверкой типов.
Концептуально неправильное, нетипизированное и prone to bugs решение - добавить в документацию констрейнт, что айди из базы никогда не должен равняться нулю, добавить в докстринг замечание, что айди = 0 подразумевает, что данная энтитя не записывалась в базу. Применяется в говняшке, потому что и так сойдет.
>>2652720 А, ну так хули ты тут склоняещь Голанг? Дядя Роб сказал, как правильно писать, вот и пиши. Длинно - похуй, так надо. Неудобно - похуй, зато просто. Дядя сказал просто, значит просто.
>>2614678 (OP) Привет аноны, заинтересован в разработке какого-нибудь опенсорса или ваше интересного проекта, вдруг вы разрабатываете что-то реально интересное, может быть бесплатно, в зависимости от проекта готов уделять 10 + -ч в неделю это еще много, поверьте, если работаешь p.kwlks123@гмайл.ком
>>2652233 >Ей-богу, я воюю против ГОвна на одной стороне со школьниками-дебилоидами - лучше б вы молчали. Ты просто тупой мудак, который не умеет четко выражать свои мысли.
Так. Поясните мне по хардкору, что за хуйня. samber/do мне сообщает: DI: could not find service `service.IService`, available services: `chi.Mux`, `render.Template`, `service.IService` Чтозанахуй?
>>2653633 Мне нсчальник передал скелет кода. Я бы не ставил, я в нём смысла не вижу. Но я вижу магию, которую я не понимаю. Какая-то еботень со структурами, интрефейсами и указателями. В простом языке.
>>2653490 >Я не тот анон, которому ты отвечал. Ей-богу, какой же ты тупой. Мудило! Это анонимная борда, я отвечал на сообщение, в душе не ебу сколько там семенов.
>>2653647 Ага. Получается, что надо регистрировать структуры. Указатели на структуры. Интерфейсы рагистрировать и получать не надо. Интерфейсом можно объявлять переменную, магию им делать на надо.
А от этого DI я собираюсь избавиться, но позже. Не вижу смысла в DI, когда у тебя нет полиморфизма в самом дизайне приложения, когда у тебя уникальная структура, в единственном экхемпляре. Думаю всё убрать в "статический клас" - спекаильно обученный package.
>>2653673 >Думаю всё убрать в "статический клас" - спекаильно обученный package. Все зависимости на данном слое у тебя должны быть убраны в структуру, которая передается аргументом (или ресивером) к хендлерам.
ты уже вторую неделю пытаешься разобраться в базовых вещах, как я понимаю ты стажер, как тебя до сих пор не уволили? что за фирма, если не секрет, нонейм ипшник?
>>2653704 Я на перле 20+ лет писал. И последние 10 лет поддерживал жуткое легаси. Пришёл сюда на поддержку, как выяснилось, ещё более страшного легаси (до 40к строк в одном файле, все в одной процедуре, вложенности if-ов достигает восьми), но в процессе решили всё переписать на го, заодно научить ему меня. Типа, бросили в воду, плыви.
>>2653704 > разобраться в базовых вещах В базовых вещах простого языка, который состоит из подводных камней. А заодно переписать нормально код человека, который поместил в пакет repository интерфейс Service и структуру Repository, а в пакет service - интерфейс Repository и структуру Service.
>>2653673 >А от этого DI я собираюсь избавиться, но позже. Не вижу смысла в DI, когда у тебя нет полиморфизма в самом дизайне приложения реальный di как паттерн или ты про di фреймворк еботу которая сама подставляет зависимости? сам di нужен, чтобы можно было замокать зависимости и написать юнит тесты без боли, которые не ломаются от минорных правок в соседнем пакете.
В книге Батчера, Фарина - Go на практике, авторы приводят рецепт №8 по сопоставлению URL-адресов с шаблонами через регулярки. Однако, в их примере я нашёл ошибку. Они используют в качестве хранилища мапу, а это значит, что при наличии двух и более подходящих шаблонов, выбираться будет любой первый попавшийся. Т.е. шаблон "GET /" может перехватывать запросы вида "GET /hello". Получается даже в таких авторитетных книгах пишут лютый говнокод?
>>2653974 Для исправления ошибки изменил их структуру на слайс, где хранятся ссылка на обработчик и откомпилированная регулярка. Само собой обработчики надо добавлять в слайс в порядке от частного к общему, т.е. "GET /hello" должен добавляться раньше, а "GET /" должен идти последним. В принципе, таким образом можно получить неплохой маршрутизатор для своих проектов.
Я вот сейчас думаю, что подход Адама Фримана, который написал свой мини ASP.NET на голанге, не так уж и плох. Базовая библиотека не позволяет писать полноценные веб-приложения, потому надо наворачивать ещё целый слой логики. Среди фреймворков целый зоопарк и не понятно какой учить, а какой не учить. Написать что-то своё тоже сложно, потому что нет опыта.
>>2653782 >В базовых вещах простого языка Нет, в этом посте я подразумевал базовые вещи софтваре инжиниринга в целом, а не говняшки в частности, - ну архитектуру и т.п.
>поместил в пакет repository интерфейс Service и структуру Repository, а в пакет service - интерфейс Repository и структуру Service. А что не так? Видишь, ты опять упираешься в непонимание принципов архитектуры, инверсии зависимстей и т.п.
>>2653974 >Получается даже в таких авторитетных книгах пишут лютый говнокод? Да, разумеется (и это не авторитетная книга). Тем более средний уровень ГОвноразработчиков довольно низкий, поэтому и большинство публикующихся книг по говняшке - довольно низкого качества. Их же пишут не какие-то марсиане с нибиру, а такие же кодеры.
Алсо, возможно описанное поведение соответствует ТЗ, и это не баг, а фича!
>>2654001 >Само собой обработчики надо добавлять в слайс в порядке от частного к общему Нет, нужно применять сортировку по длине префикса. Раз уж фиксишь - то фикси, а не меняй один говнокод на другой.
>В принципе, таким образом можно получить неплохой маршрутизатор для своих проектов. троллейбус-из-буханки.пнг
>>2654638 >сортировку по длине префикса Как ты мапу отсортируешь? Тем более перебор идёт в порядке внутреннего представления (по вёдрам в карте). А если при каждом запросе гонять сортировку, то это ещё хуже, чем линейный поиск по слайсу в моём случае.
>троллейбус-из-буханки.пнг Это же главная идиома голанга)))
Я хз, мб меня засрут, но я считаю правильным делать круд микросервисы, а дополнительную бизнес логику помимо этой выносить в отдельный микросервис, этакий
юзер-товары-корзина(3 круда) бизнес процесс добавить в корзину уже отдельный микросервис. Охуенно же по факту, имеешь структуру дерева микросервисов и быстро фиксишь\добавляешь в нужное.
>>2654435 >Написать что-то своё тоже сложно, потому что нет опыта. >Я вот сейчас думаю, что подход Адама Фримана, который написал свой мини ASP.NET на голанге, не так уж и плох. >Базовая библиотека не позволяет писать полноценные веб-приложения
>>2655092 Зачем тееб го, анлг* Иге вль за него платят деньги, и я страдаю. Я бы поедпочёл, чтобы мне платили за шарп, но мне платят за го, и я разыменовываю nil. А тебе зачем? Возьми нормальный типизрованный язык. Или возбит нормальный гибкий удобный язык.
>>2655137 У голанга самый высокий рейтинг вката, а на сишарпе он один из самых низких, дак ещё надо и фронт учить, потому что 75% вакансий - это фуллстек.
>>2653700 >все мысли выражены предельно четко Какие блядь мысли? Там полный пук-среньк, а не мысли. Ты тут уже несколько постов усираешься мне что-то доказать, но при этом не привел пример когда нужно итерироваться по индексам, а не значениям. Единственное, что я могу назвать это инициализация пустого массива. Все остальное или значение или индекс+значение удобнее.
Так. У меня есть интерфейс с констрейнтами и мутатором. ` type A struct {} type B struct {} type AB interface {A|B} { mutator() } func (x AB) mutator() { } ` А это весёлая птица-синица, то есть конструктор ` func ABCreator[T AB] () T { return &T{} } ` Вот кот, Который пугает. то есть вызов коструктора: ` var a = ABCreator[A] ` И тут я получаю, что A нельзя использовать в качестве AB. потому что AB имеет метод с поинтер-ресивером. Я долго курил SO, и там предложили сделать ЕЩЁ ОДИН интерфейс ` type ABP[T AB] interface { T } ` И таскать его ВСЮДУ за собой, типа ` func ABCreator[T AB, P ABP[AB]] () P { return &T{} // кажется так, тут я ХЗ что писать } ` Это же уродливо. Мне везде надо за собой таскать ABP, только потому что мне нужен поинтер-ресивер...
>>2655880 Даже по запросу http://localhost:5000/static выдается Root. Тем более весь смысл именно в том, чтобы он обрабатывал все файлы в папке static. Там всякие js, css файлы, картинки и т.п.
>>2655655 >Ты меня перепутал с другим аноном (кажется, тебе об этом уже говорили). Повторяю для тупых: >Мудило! Это анонимная борда, я отвечал на сообщение, в душе не ебу сколько там семенов.
>>2655655 >Любой код, изменяющий элементы массива, КО на связи. То что ты читаешь жопой я уже понял >или индекс+значение удобнее
>>2656675 >Зачем индекс+значение, если мне нужен только индекс? Ты туповат, но для Говно разработчика это норма.
Итак, для аутистов еще раз. Ты Disclaimer: или кто-то другой кто спизданул в этом треде. Я семенов сортировать не собираюсь спизданул: >Любой код, изменяющий элементы массива Чтобы что-то менять надо иметь старое значение эта мысль может быть не очевидна для даунов, но это правда. И тогда >индекс+значение удобнее не надо будет slice делать, можно сразу slice = transform(superStruct).
Ждем вскукареков про то что slice читабельней чем superStruct потому что ко-пок.
>>2656729 >Чтобы что-то менять надо иметь старое значение вообще-то иметь возможность обратиться к старому значению которое лежит по правильному адресу, ведь копию также можно назвать "старым значением" во многих контекстах
>>2656729 >Чтобы что-то менять надо иметь старое значение Необязательно. Вангую, что ты быдло-оопблядок, не слышал про функциональное программирование (в 2024-то году, хехмда), и для тебя изменять (ака mutate) - это то же самое, что обновлять (ака функция из старого значения в новое).
>slice = transform(superStruct) Я ошибся в предыдущем спойлере, нейминг выдает в тебе студентоту-вкатыша.
>читабельней чем Разумеется в большинстве случаев доступ по индексу будет читабельней, чем смесь из доступа по индеку в lhs и нового биндинга.
Про то, что в отдельных случаях копия значения != само значение тебе уже пояснили.
Два вопроса. 1. Как писать миграции на буне, если я не хочу отлелоьно выписывать sql? Чтобы он по структуре сгенерил мне таблицу. Официальная документация какая-то туманная. 2. Как правильно писать тесты на го? Что почитать на эту тему?
Сам язык неплохо описан, но вот стандартная библиотека плохо. А про написание реальных приложений инфы вообще ноль. Все учебные курсы рассказывают как написать примитивный http-сервер через один HandleFunc и ListenAndServe. Но реальные приложения так не пишутся. Базы? Ну рассказывают как подключиться, там выполнить запрос. А миграции? Транзакции? Ноль инфы.
В общем, выйти на уровень профессионального разработчика невозможно из-за отсутствия инфы.
>>2658707 Везде. В го нет ссылок. Это слишком сложно для простого языка. И если ты хочешь менять значение - надо передавать указатель. А если ты хочешь менять значение вызывателя - тебя ждут незабываемые чамы и дни. Даже моя привыкшая к void* жопа отказывалась принимать с первого раза. Неявное кастование приятно щекочет простату.
>>2658556 >1. Как писать миграции на буне, если я не хочу отлелоьно выписывать sql? Чтобы он по структуре сгенерил мне таблицу. Официальная документация какая-то туманная.
>>2658711 >Все учебные курсы рассказывают как написать примитивный http-сервер через один HandleFunc и ListenAndServe. Но реальные приложения так не пишутся в больших компаниях у тебя будет шаблон main.go, где нужно тупа зарегать хендлеры/прокинуть репозитории/сервисы, даже ListenAndServe за тебя уже есть в копипасте.
>>2658980 Я ещё слышал, что надо писать промежуточное ПО, уметь делать валидацию форм, логирование, авторизацию и всё это уметь тестировать. Но инфы по этим темам нет. Есть курсы для новичков, где в лучшем случае делают примитивные примеры, а как это реализуют в реальных приложения - не пишут.
>>2658711 >миграции, транзакции Помешанный шизоид на ОРМ, ты? Откуда только таких джунов понабрали, которые без орм ебучую миграции не осиливают блять…
>>2659093 Нахуя нам ради тебя открывать гугл и искать что то? Потом еще и слушать твое нытье если статья окажется хуйней. Открыл гугл и завалил пиздак, ВСЕ, никто не носит с собой коллекцию не нужных им статей, не все настолько тупые как ты
>>2659099 А нахуя ты вставляешь своё тупое мнение тогда? И в отличии от тебя, тупого пиздабола, я уже гуглил эти темы. И на основе это опыта утверждаю, что учебных материалов в свободном доступе нет. Но тут высирается очередной тупоголовый уёбок, который не погуглив, не проверив этот вопрос, высирает своё тупое мнение, что материалов там якобы дохуя. А когда его просят скинуть хотя бы пару ссылок, то сразу сливается со словами, что ему нахуй не надо что-то искать за других. Дак нахуя ты лезешь со своим мнением? За слова отвечать не учили?
>>2659011 большая часть этого к го как таковому не относится и везде немножко по-разному будет сделана с разными либами. на каждой работке придется привыкать к чему-то новому, главное понимать принципы, а они вообще языконезависимы. если ты вкатывальщик, то тебе как стажеру принципы объяснят и у тебя будет там ~3 месяца, чтобы это вдуплить на реальных примерах сервисов твоей команды нужно только понимать как делать по подобию.
Только устроился работать фронтендером но думаю уже как перекатиться на голанг. Скажите это реально без опыта на других языках бэка (кроме node.js время от времени) и если нет с какого языка больше всего шансов на го потом перекатиться?
>>2661019 от компании к компании зависит, вряд ли можно дать общий ответ. я думаю у нас тебе нужно будет сообщить HR о том, что ты гомосексуал у тебя опыт только с ЖС, но ты хочешь пойти в роли полноценного заднеприводного. тебе скорее всего подыскали бы инженера, который может на ЖС провести секцию по бэку. но тут уже зависит от готовности/желания самих интервьюеров, а гошников у нас больше, чем перекатчиков с ноды
Кажется я понял, почему у голанга такой высокий индекс вката и не могут найти разработчиков. А всё потому, что нет учебных материалов. Авторы написали одну книгу как гонять байтики, а книги по написанию реальных приложений никто не написал.
>>2662007 В книге собрана вся нужная инфа и проверена рецензентами. А статейки пишут кто не попадя и их никто не проверяет. Тем более в сотне статеек сложно ориентироваться, если не знаешь какие темы тебе вообще нужны. Вот выше я озвучивал некоторые из них, а сегодня узнал ещё про контекст. А если бы мне не повезло и я бы про него не узнал? Так что лучше прочитать добротную книгу и получить весь объём знаний, чем прыгать по статейкам с пустой головой.
>>2662010 >В книге собрана вся нужная инфа и проверена рецензентами. А статейки пишут кто не попадя и их никто не проверяет там выше была книжка, которая написана прожжённым шарпистом, которую ревьюил другой прожжённый сертифицированный майкрософтом шарпист. ты больше получишь от того, что 5 статей от индусов с плюрализмом мнений прочитаешь и составишь своё, чем такую графоманию от залетного хуя, который рассасывает её на 30 страниц.
>>2662010 Ты из тех самых верунов, думающих что книги пишут умные люди? Эти книги пишут нищуки, которым в айтишке не платят, поэтому приходится идти как книгописец, тогда их и начнут брать, ведь ЦЕЛОЯ КНИГА
>>2662399 Я просто пишу свои проекты и все, хватить пытаться делать все, лишь бы не само программирование, его так и надо учить, брать и тупо кодить, что то не понимаешь или нужно - открываешь гугл и гуглишь что тебе конкретно надо найти, го тур только пройти не забудь
>>2662439 Я пытался гуглить маршрутизаторы, но там в каждой статье по разному пишут. В итоге так и не понял что и как писать. Ещё бывает с ошибками пишут, которые не сразу замечаешь. Непосредственно про маршрутизаторы в старых статьях пишут, что надо использовать гарилу, а сейчас встретил инфу, что гарилу нельзя использовать, потому что она всё. И кому верить?
>>2662399 Эм. Пчел, есть энтерпрайз-программирование. И есть язык го, для которого даже готур проходить неоябательно. Го в определённом смысле реально простой - в нём куда ни ткнёшься, ничего нет, учить буквально нечего. Зажача стоит как выразить лучшие практики программирования на этом зяыке, в котором ничего нет. Но это приходит только с практикой.
>>2662579 Тогда с чего ты взял, что в книге будет единственно правильное мнение? Особенно с учетом, что книга в 99% случаев - устаревшая. Роутер устареть никак не может если что, его просто перестали поддерживать и выпускать фиксы
>>2662585 Книгу я хочу, потому что там описаны другие темы: миграции, авторизации, контексты и т.п. Откуда я вообще это должен всё узнать? Это как дать человеку, который не умеет читать, учебник русского языка и удивляться, почему он до сих пор не начал читать/писать по-русски.
>>2662399 ну я пришел на работу стажером после прохождения го тура и делал по подобию как в команде принято. лазил по внутреннему гитлабу и искал что круто выглядит. лазил по гуглу читал говностатейки
>>2662593 Используя библиотеки и нарисовал свои петы ты в любом случае так или иначе столкнешься с этим, а дальше уже конкретный вопрос забиваешь в гугл, почему до тебя этот не доходит то
>>2662775 ну слушай метрики логирование это совершенно минорные штуки, которые даже в топовых компаниях часто делают на отъебись и всё меняется от команды к команде. у нас на собесах например вообще нет вопросов по этому, максимум на финальном собесе тебя спросят с какими технологиями ты работал и ты можешь там прометеус/эластик упомянуть. но всем будет понятно, что если челик учил эту хуйню самостоятельно без команды, то грош этому цена. аутентификация это еще та залупа, с которой вероятно даже не придется столкнуться, будешь сразу userID в хедере получать.
>>2662775 а ну и бля. в той залупе даже код ревью не проводили, я тупо мержил свой говнокод себе в мастер. так что повезло не повезло. ну и вообще я к тому, что тебе эта хуйня не должна помешать пройти собес и уже учиться у команды.
>>2663026 >аутентификация это еще та залупа, с которой вероятно даже не придется столкнуться, будешь сразу userID в хедере получать ну и если это не так, то с JWT разобраться и написать себе мидлварю можно буквально за день
>>2663994 Я изучил го кор, но не понимаю как писать реальные веб-приложения, потому что не могу найти инфу. Сейчас скачал какой-то видеокурс и там тоже самое. Рассказывают про стандартную библиотеку net/http, а примеров написания реального приложения не дают.
>>2663901 Хм. Где бы об этом почитать. Именно о философии, приемрно как написано 100500 книг и статей о философии ООП. Потому что в голове как-то не совсем укладывается. То есть оно работает, да, хотя ко(нтр)вариантности не хватает, но в жабе или шарпе я уверен, что если я хлрошо прописал типы, то у меня всё правильно работает. А с этими интерфейсами, которыми может прикрыться кто угожно в любой момент...
>>2664012 Тебе десять раз сказали - читай любую книгу по паттернам, по энтерпрайз-приложениям. Просто пиши не на жабе, а на го. Зачем тебе вообще го, если ты не можешь даже этого понять?
>>2664068 Если у тебя го вообще первый язык то тогда сложновато, лучше питон/ноду годик а потом го. Если у тебя есть опыт программирования на других язык, и ты в целом идешь не с одной прочитанной книгой на собес, то шансы есть. У меня месяц ушло на получение оффера. Портфолио не забудь, хотя бы какие-нибудь круды туда покидай типа простых апишек. Иначе hr твое резюме даже смотреть не будет.
>>2664756 Я учил сишарп и джаву до этого, но в сишарпе нет кроссплатформенности и обратной совместимости, много сахара, а в джаве кривые инструменты и надо покупать платную идею, чтобы писать веб-приложения.
>>2664758 В таком случае не парься, шансы есть. Тебя больше по докеру, базам, микросервисам гонять будут чем по языку. Хотя конечно зависит от собеса. Могут что-то типа этого >>2664661 или классика о том почему переменная цикла в замыкании выводит 10 раз 10, а не 1, 2, 3 и т.д Пройдись по основным моментам, как шедулер работает, сборщик мусора, оч. рекомендую прочитать Concurrency in Go: Tools and Techniques for Developers. А так могу пожелать только удачи и не слушать тех кто отговаривает.
>>2664758 Хорошему программисту сахар мешает. И платная идея. Чувак, учи лучше 1С, или там PHP5. Будешь вордпрессы хуярить пачками. Вордпресс грязный, вонючий, за него платят мало, но его можно хуярить пачками.
А здесь... да, работа с сетью как элемент языка это забавно. НО БЛЯДЬ ЕХАЛ ANY ЧЕРЕЗ ANY. Что можно запистаь в базу? Правильно, any. Что можно передать по сети? Ну-ка, дети, мы про него стишки учили и рассказы читали? Правильно, any! На выходе тот же PHP5 получается, только с горутинами.
>>2664871 Я в универе писал lab.cpp и мне очень нравилось гонять байтики. Поэтому подход го мне ближе, чем заоблачные абстракции джавы и сишарпа.
>>2664875 Сейчас во всех дистрибутивах линупса удалили дотнет6 и оставили только 7. В итоге фиг запустишь программы для дотнета6 или более поздней версии. Ещё вижла только под винду. Ещё асп.нет надо переучивать каждый год.
>>2664875 Просто для сравнения. Я могу поставить голанг на старенький ноут и программировать на нём в любом текстовом редакторе. А для джавы надо ставить монструозную идею, которая жрёт по 4 гига в простое и тормозит безбожно. А сишарп надо ковырятся с подгонкой нужного дотнета, да и среды для линуксов толком нет. А среда нужна, потому что сама структура проектов требует объединения их в солюшены. А солюшены поддерживаются только вижлой в винде. Сами микрософты официальным решением проблемы предлагают ставить виртуалку с шин11 и даже сделали готовые образы.
> во всех дистрибутивах удаллили dotnet LTS > на го можно писать в блокноте, а на жабе только в платой идее > го скомпилируется и запуститится на первопне > асп надо полнолстью переучивать каждый день, ПОЛОНСТЬЮ, КАРЛ! > я вот писал в универе лабу на десять строчек, и хочу такую же работу, чтобы два байта переслать надо было, я слышал что байты шлют на голанге и платят за это 500к/нс > ни в одной книге по голангу не написано, какой роутер использовать и зачем он нужен > ваши советы говно, я буду продолжать есть суп ножом и ныть
>>2664763 Тащемта правильно отговаривают. Сейчас даже на пхп вакансии по 100 откликов. А на гошечке (на которую мечтают сьебать пхпшники) это вообще анрил. Мало вакансий с кучей откликов от опытных пхпистов. Это ещё при том что у самих пхпистов сотни желающих вкатунов. А это самый простой язык для вката
>>2665058 Опытные пхписты привыкли писать в рамках фреймворка типа ларавеля или симфони, а тут надо самому писать фреймворк. Из-за этого вкатиться в голанг сложнее.
Я уже почти год бахаю на го, и уже почти месяц работаю в компаниянэйм, но я, блять, до сих пор не понимаю интерфейсы, есть ресурсики где можно доступно за это узнать