Это копия, сохраненная 7 июня 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Обсуждаем язык, смеемся с залетных крестоносцев, обсуждаем почему нам не нужны дженерики, наследование и эксепшены, по каждому багу находим трехстраничный пост в официальном блоге Go, объясняющий почему это на самом деле фича, ждем, когда нам завезут дженерики, наследование и эксепшены.
Растобляди завидуют, сектантская запарта не переваривает.
С чего начать:
- В обязательном порядке проходим Go Tour:
https://go.dev/tour/welcome/1
- Читаем документацию прямо по порядку (пункт "Learning Go"): https://go.dev/doc/
- Ознакамливаемся с общим roadmap по изучению языка и сопутствующих инструментов: https://github.com/Alikhll/golang-developer-roadmap (постоянно обновляется сообществом)
Литература:
- Донован, Керниган "Язык программирования Go"
- Также хорошие книги для начала: https://www.golang-book.com/ и https://www.practical-go-lessons.com/ (веб-версия - бесплатная и хорошо подходит для новичков в программировании)
- Книги из списка https://github.com/dariubs/GoBooks
Полезные ресурсы:
- Сборник паттернов и инфы по микросервисам: https://microservices.io/
- Смотрим видео https://www.youtube.com/channel/UC_BzFbxG2za3bp5NRRRXJSw
Обновляемый список с пакетами: https://github.com/avelino/awesome-go
Небольшая конфа треда: t.me/golang2ch более чем живая!
Предыдущий тред умирает здесь: >>1986204
Вкатываюсь в deprecated джаву для залета в МЯСКОТ и надеюсь свитчнуться на гошечку внутри компании. Сеймиславы ?
>ID *int64
или
>ID int64
или
>ID int64, idSet bool (фу блять фу нахуй)
При создании экземляра ID не известен, и получается после добавления в базу. Соответственно, как чекать, ID действительно 0 или не установлен.
Играться с базой, чтобы айдишник гарантированно не равнялся нулю - дроч. Хочу максимально просто на автоинкременте без лишних модификаций самой базы. Ровно как и генерить айдишники в программе. Ровно как и ебаться с конструкторами с инкапсуляцией. Стракт публичный и пользователь я может просто забить хуй на конструктор, плюс бойлерплейт умножается на 2.
Вроде как идея с поинтером неплохая, но чувствую, что поинтеры в данном случае плохо, поскольку везде придется добавлять чеки и вроде как не бест практис.
В общем, рассудите, как лучше сделать. Ситуация же дефолт.
Почему в старом треде нет ссылки на перекат?
type ID struct {
id int64
isset bool
}
func Create() ID {
return ID{0, false}
}
func (i ID) Set(id int64) {
i.id = id
i.isset = true
}
func (i ID) Get() (int64, error) {
if i.isset {
return i.id, nil
}
return 0, fmt.Errorf("id not set.")
}
Че с этим принято делать?
Не могу разобраться с тем что написано в go.sum
там действительно упомянуты какие-то древние версии
например есть такая строчка:
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod
Я даже не импортирую этот пакет напрямую и не вполне понял какой именно пакет его заимпортил.
go get -u сделал - кажется не помогло.
Как тут принято обновлять?
Я, в принципе, понял в чем прикол.
https://github.com/google/gopacket/blob/v1.1.19/go.mod
Эти ребята вряд ли будут поднимать у либы golang.org/x/net версию ради меня?
И релиза от них не дождешься.
И нормально будет поигнорить сие странное уведомление, поскольку я знаю, конкретная уязвимость мою программу не затрагивает ?
потомушто для каждого аппенда реаллоцировать слайс неэффективно
Под винду опенсорсное IDE удубное какое?
Ты что вообще прокачать то хочешь пет-проектом? Бэк на го? Тогда не трать время на фронт и обычный хтмл сделай.
Не трать время на парашный фронт. Максимум изучи ELM чтобы не содержать грязные .html .css .js файлы.
Пиши бек , даун.
Чем не предсказуемо то, что если у тебя capacity < length, то нужно заново аллоцировать, ибо банально некуда больше разместить???? Во всех языках так работают динамические массивы
Во всех языках - это отдельный контейнер, у которого свой АПИ с защитой от "дурака". А тут тебе вываливают все кишки и делай что хочешь. Очень легко ошибиться.
Кто тебе какие кишки вываливает умник, что ты вообще несёшь? Чем тут блять отличается от других языков то блять? Единственное отличие, что слайс не копия, а и есть сам по себе массив с нужными оффсетами, о чем написано даже в ебучем го туре и в каждом ебучем месте об этом написано, но ты же тупой, для тебя это «кишки» тупой сука питоноеб
К примеру, в джаве есть ArrayList, в котором массив лежит внутри. Сам объект управляет им, а мы просто пользуемся благами динамического массива. Доступа к внутреннему массиву у нас нет и соответственно ничего сломать мы не можем.
Пошел почитать про Elm и охуел. Кому это надо вообще? Ну нужен простой типовой фронт, идешь и делаешь его хоть на jquery, хоть на ванильном реакте.
Нахуя отдельный язык тащить в таком случае?
вообще было бы классно иметь какой-нибудь yaml-конфигурируемый интерфейс типа bootstrap, чисто чтобы его вообще без программирования натягивать на сваггер апи в таких неважных вещах
Сейчас, да, заметил, что по крайней мере в SQLite автоинкремент начинает с единицы. Но вообще то это нихуя не очевидно, я с базами работать только начинаю.
Это типо универсальное соглашение и в 99% случаев база присваивает id с единицы?
Тогда в принципе можно и на обычном int64 херачить.
Не поверишь, но тут точно так же
Есть смысл перекатываться с питона на го для написания повседневных скриптиков? Или го СЛОЖНЕЕ?
> господи, с какими дураками на одной борде сижу
Не перестаю охуевать с этого, кстати, я уже подозреваю, что тут кроме джунов и вечных джунов не сидит никто.
И тут непонятно, либо это такой срез индустрии и у нас действительно 99 кодеров из 100 долбоебы, или это специфика двача такая если последнее, то это что-то обо мне говорит
>>15001
1) Можешь считать, что если id == 0, значит сохранения в базу не было.
2) Вообще такая логика как правило говорит о том, что ты что-то делаешь не так. По идее тебе в коде должно быть или не важно, с чем работать или ты уже точно знаешь, что сущность, с которой ты работаешь - уже зафиксирована в бд.
3) Если хочешь обмазаться типами, то можно разделить данные и сущность со служебными полями, вот так к примеру: https://go.dev/play/p/F6XWYXpIlXm
перекатываться с петона особо нет. будет меньше ебли с зависимостями, шарить скриптики проще, ну и легче параллелить хуйню. с другой стороны меньше пакетов и тупо import gosuslugi для скриптика не получится сделать за отсутствием либы. ну и базовая хуйня вроде пройтись по строчкам будет вербознее.
а с другой стороны если бы ты уже писал на го, то петон тебе нахуй не вдался бы, кроме случаев с либами
>кроме случаев с либами
А что есть другие варианты?
Практически всё что когда-либо надо было сделать - делалось через уже готовые либы
>А что есть другие варианты?
хз, от задачи зависит, повседневные скриптики разными же бывают и количество либ разное. я привел пример с апишкой госуслуг. ну или чисто для примера (сейчас в гошке вроде есть норм покеты) в петоне будут более удобные/зрелые пакеты штобы собрать бота для телеги. тупо потому что там юзеров больше было и они его успели развить и передизайнить несколько раз.
>Практически всё что когда-либо надо было сделать - делалось через уже готовые либы
ну для популярных задачь да
Про пакеты спорно, и там и там есть и говно и нормальные.
>>18169
Короч, ключевая разница, это бекенды, апи и параллельная обработка данных.
Го из коробки очень быстрый и эффективный и при этом поддерживает нормальную многозадачность, что позволяет твоему апи отдавать ответы с очень маленькой задержкой и при этом программировать это все на более менее простом языке, которые не такой сложный как плюсы и не такой жирный, как джава.
Всякий финтех, а также яндекс (еда вроде бы) и прочие жирные стартапы поэтому активно пишут сервисы на го, а те, которые не на го (а на чем-то медленном, тот же php или питон) - на го переписывают, потому что во первых экономия ресурсов, го жрет сильно меньше, а во вторых производительность.
Ну и всякие сетевые утилиты а-ля кубернетес.
Питон же из всех более менее популярных языков вероятно самый медленный не считая руби, но тот вроде уже мертв и апи на нем пишут только от большой любви или незнания прочих языков. Ну или легаси, не без этого.
Но при этом питон за счет своей слабой типизации очень удобен для быстрого написания скриптиков и всяких прототипов.
Про cpython и прочую эзотерику вспоминать не будем
Поэтому для скриптиков менять стек я не вижу смысла, оставайся, где был.
>Го из коробки очень быстрый и эффективный и при этом поддерживает нормальную многозадачность, что позволяет твоему апи отдавать ответы с очень маленькой задержкой и при этом программировать это все на более менее простом языке, которые не такой сложный как плюсы и не такой жирный, как джава.
IDE есть под него нормальное?
ООП там как?
> Про cpython и прочую эзотерику вспоминать не будем
Фикс:
Cpython и есть самый дефолтный интерпретатор.
Скорее всего ты имел в виду Cython.
Мимопитономакака
> Го из коробки очень быстрый и эффективный и при этом поддерживает нормальную многозадачность,
Как Си, дя?
Ну будет говнопакеты.орг, и на нем такое сделают. В чем разница-то?
Eclipse with GoClipse
Ну да, имелось ввиду, что она динамическая неявная.
>>18342
Бля ну погугли, нахуя ты задаешь очевидные вопросы про ооп спорно, но скорее есть, ide от jet brains есть
>>18360
Я про эзотерику, которая пытается сделать из питона компилируемый язык.
>>18366
Только го со сборщиком мусора и планировщиком, а в си тебе придется много чего делать руками. Ну и в целом го всё же сильно освременнее.
>>18388
Смотря чего ты от этих методов хочешь
>>18414
Сделай хелпер-функцию try или assert и не парься, только в продакшен её не кати. Или используй "_" вот так :
val, _ := funcWithError()
>>18420
Это проблема не гитхаба, а опенсорса, никто не гарантирует, что ты не скачаешь хуйню через тот же npm к примеру.
При этом go.mod и go.sum во первых фиксируют версии, то есть, если ты поставил себе коммит X, то ты его и будешь использовать и если кто-то добавит хуйню в коммит X+1, то без осознанного go get -u ты на заминированный коммит не переедешь. А во вторых, go.sum хранит также чексуммы и даже если кто-то изменит код существующего коммита, то чексуммы не сойдутся и го это спалит и выругается.
Ну и никто не мешает тебе использовать зеркала, кэширующий goproxy или что угодно ещё, существует много инструментов.
>го со сборщиком мусора
Он уже перестал статтерить весь сервер нахуй или его просо сделали отключаемый и на том забили хуй (после того как с го съебались крупные ребята)?
Бля, это тебе не джава, вот уж где паузы прям заметны. Никто на го не забивал и там нормальный CMS сборщик.
"Почему Discord переходит с Go на Rust" были новости не так давно,
и до этого помню точно такие же посты уже как с десяток лет лол
Если бы ты внимательно читал эти "новости" трехлетней давности, или хотя бы пытался прочитать то, о чём я тебе писал вместо того, чтобы пытаться самым примитивным образом доебаться, то ты бы понял, что в дискорде (как и в дропбоксе до этого) они по сути делали огромный LRU кэш и в этом случае (огромная хреновина в памяти с (пере)записями по ключу) тебе в принципе языки с гц не нужны, гц будет тупо тратить кучу ресурсов на сканировании памяти, блокировки и так далее, когда у тебя профиль работы приложения вообще не подходит под такой флоу.
Вообще примерно любой язык с гц у них создавал бы проблемы из-за просадок во время работы гц: хоть го, хоть джава, хоть эрланг, хоть кто. Какие-то лучше, какие-то хуже.
И очевидно, что для того, чтобы тупо держать в памяти хэш таблицу и отдавать из неё значения, языки с прямым управлением памятью подходят намного лучше.
Возвращаясь к го, теоретически ты конечно можешь полностью отключить гц debug.SetGCPercent(-1) если не ошибаюсь и управлять памятью вручную, но тогда непонятно, зачем тебе го в данном конкретном случае. Так что чуваки из дискорда правильно поняли, что выбранный ими инструмент неоптимально решает их конкретную задачу и вместо того, чтобы делать си из го, они поменяли язык на более эффективный для их задачи. Здесь нет никакой проблемы ни в дискорде, ни в самом го, который по определению, как "язык с cms гц" обладает преимуществами (легче программировать) и недостатками (оверхед за счет гц).
> го не подходит для высоких нагрузок
Ну так бы и говорили, вот только нахуй он тогда нужен на сервере?
Я если честно уже заебался отвечать на тупые набросы, вы если уж хейтите, придумайте что-то поумнее.
Тебе прямым текстом сказано, что под профиль нагрузки "хэш таблица в памяти" языки с гц не очень хорошо подходят. Любые. В том числе го. Но на го, джаве или js знаешь ли никто ин-мемори бд и не пишет.
При этом есть куча других профилей - всякие лоу-лейтенси апи, байтомолотилки и тд, где такие языки работают хорошо.
импортируемые модули отваливаются
для каждого нового проекта нужна новая папочка
для каждого модуля нужна папочка
модули отваливаются импорты срут ошибками
это че такое я не пойму
обновил эту поеботу с 1.16 и в маршрутке началось такоое..
Неправда, никаких богоподобных фреймворков как в других языках в го нет. Точнее, встречается иногда говно на гитхабе, но я не знаю ни одно проекта, где такое бы реально использовалось.
>>20050
Ты что-то где-то у себя поломал скорее всего. Не представляю что, я ставил го раз 10 на разные системы и проблем не было ни разу. Снеси просто всё, что есть и поставь заново. И приходи с конкретными ошибками уже.
> для каждого нового проекта нужна новая папочка
> для каждого модуля нужна папочка
Эм, так везде, на всех языках. Даже не представляю, как может быть по другому.
Сильно зависит от контекста. В ряде случаев лучше писать даже не на питоне, а на баше. Из плюсов использования го, кроме конкурентности, о которой уже писали, переносимость и обратная совместимость:
скрипты на любом интерпретируемом языке требуют в системе установленный интерпретатор, при том версии не ниже чем та, в которой поддерживается самая новая из использованных фич. В случае питона сломана еще и обратная совместимость, когда скрипт для второй версии не запускается на третей. Т.е. написанный на питоне 10 лет назад код уже не работает.
В го такой проблемы нет, бинарь по дефолту зависит только от libc, но при желании даже этого можно избежать и сделать программу, которая будет работать даже в пустом контейнере.
Да и го код 10 летней давности всё еще компилируется.
Возникает, конечно, проблема с тем, что на системы с разными ос/процессорами нужны разные бинари, но это решаемо, в го кросс-компиляция очень простая.
>>18748
> Или используй "_" вот так :
> val, _ := funcWithError()
Ни в коем случае не делайте так. В лучшем случае вы упадете на следующей строке, при некорректной работе с nil val.
В худшем вы продолжите исполнение с некорректными данными, если val это стринг или число. Так можно словить сложно отлаживаемое ебучее поведение, как в баше без set -e и set -o pipefail
Корректное использование игнорирования ошибок существует, но очень редкое.
А вот хелпер это да, хорошая идея. Я обычно такой использую https://go.dev/play/p/oJ65gdf6z3d
Запрос был прямой
> , дак это ошибки, если что-то не используешь
ответ на это тоже прямой - хочешь пока накидываешь код что-то пока не использовать - юзаешь _.
В продакшен я и не советовал ему это пихать
А что там писать с нуля то? Роутер это буквально две минуты, дальше уже отвечаешь уровня w.Write и все
Обычно берут готовый роутер типа Echo, только это не фреймворк, а либа, то есть просто обертка вокруг net/http, которая добавляет более удобную работу с данными, миддлвари, опционально всякие распространенные хотелки по типу basic auth middleware и тп.
>>20319
Его check() это безусловно хуйня для продакшен кода, но если нужно быстро написать скрипт или просто набросать макет кода, то это нормальная тема. А мы как раз про такой сценарий и говорили изначально.
какая лучшая книга по ГО?
ток не 1200 страниц
хочу вкатиться за 5 недель(100ч обучения) и ЕБАШИТЬ 200.800к в месяц, в потом в ПМ/СЕО и ебашить миллионы в... день
Никакая, бери https://go.dev/tour , потом читай https://go.dev/doc/effective_go , потом смотри https://github.com/golang-standards/project-layout и мб что-то вроде https://google.github.io/styleguide/go/best-practices.html
И да, не понимаю, кто сейчас учит языки по книгам, это прошлый век. Это паттерны и алгоритмы не устаревают и то всякие новые модификации случаются , а у языков раз в год мажорные апдейты выходят.
Я все свои языки учил так: просто садился и начинал программировать, как мог, параллельно читая статьи с хабра по языку. Полезно ещё на публичные проекты поглядывать, но в го я к сожалению не могу посоветовать действительно идиоматичные и качественные публичные репозитории.
Мне >30 и я не могу читать книги по программированию, по одной простой причине: одна половина там устарела, а вторая является водой, которую можно и нужно пропускать.
Намного проще сидеть и гуглить статьи, которые раскрывают конкретный вопрос.
Да, копаться в таких же устаревших и водянистых статьях, выискивая ололо-актуальное и информативное. Уже бы про документацию бухтел лучше, не так смищно бы смотрелось.
Документацию живых проектов хотя бы обновляют и она не может устареть. Да и воды там зачастую немного.
А насчет статей - ну так ты ищи нормальные и всё. По любому вопросу их десятки, ищешь и смотришь на даты.
Ну так и книги ищи нормальные.
Специально для таких шизиков хитрые издатели начинают уже в ноябре-декабре выпускать книги с следующим годом выпуска. Твои статьи могут в такое? А? А?
Нормальные люди делают это монадами, но у копипастоклоунов все как всегда.
Покажи нормальную книгу по 20ому плюсовому стандарту? Или хотя бы 17? Ну если не плюсы, то хотя бы го 1.16??
Не мешай ему жить в выдуманном мире, где серьезные (тм) люди пишут полноценные серьезные (тм) книги. А в релаьности та же моча и шанс найти хорошую статьюпо интересующей тебя теме намного выше, чем аж книгу.
Дед, какой гуглинг, сейчас уже надо уметь правильно формулировать запросы к ChatGPT.
Я могу в этой пиздоте уменьшить размер получающегося бинарника
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}"
https://cloud.yandex.ru/docs/logging/tutorials/vm-fluent-bit-logging
Что они там на 50 мб запихали? Это же продукт типа EMBEDDED
Либо -ldflags="-s -w", убирает всю дебаг инфу из билда
А, блять, это вопрос был. Ни одного вопросительного знака в посте, пиздец. Принципиально не буду отвечать.
Держи в курсе
Ну один там был, хз чем ты читал
Го тур читни, там ссылка есть почему так а не эдак.
Вкратце - проще парсить и меньше двусмысленностей.
Ну и пиздец, тут даже не возврастанию сложности, а чуть ли не наугад идет
В нём
Я думал даже зачекать (разумеется выпросив у работодателя компенсацию хотя бы части стоимости), но мой пыл резчайшим образом охладил факт того, что трек "продвинутый хуесос", хотя и включает в себя полностью трек "простой хуесос", о чём прямо и заявлено — при этом не позволяет докупить расширенную часть себя отдельно. Т.е. либо ты берёшь расширенного хуесоса, либо берёшь простого, а потом "НУКА ДАВАЙ ещё разочек фуллпрайс заплати сынок ёбаный!" и тратишь 76к + 160к, за то, чтоб повторить половину курса, которую ты уже прошёл. Либо изволь раскошелиться сразу на полторы сотыги.
В пизду, проще самому изучить чем в это говно антиконсьюмерское ввязываться.
Ебать ты придумал канеш, да там даже если бы был тот формат, который ты хочешь - один хуй бы того не стоило.
Пиздец цены, вы долбоебы что ли столько платить? Да даже 10к это уже дохуя.
Это же не роадмап, это ёбаное ничего, вы берете го тур и доку, читаете их и получаете ровно то же самое, скорее всего ровно теми же словами.
Нахера вы это делаете и кормите всяких жирных тварей? Из надежды что-ли, что вас научат чему-то уникальному? Зря, всё это в интернете есть и публично доступно.
Тогда нахуя за это другие людя платят. Понятно, конечно, что раз платят, то долбоебы, а долбоебы должны страдать - но всё равно, нахера =/
Любые курсы это говно, чел, любые. Программированию невозможно научить на курсах, ему можно только научиться самому, а для этого никакие курсы не нужны. В интернете тонны гайдов и мануалов для самых маленьких, а в телеге сотни каналов, где на нубские вопросы можно почти моментально получить ответ. Курсы это место, где ты платишь деньги за то, что тебе в лучшем случае ртом на видео прочитают мануал из интернета. В худшем, тебе скинут доступ к копипасту мануала (нескольких) из интернета.
Я умею программировать, но я всё ещё долбоёб (мидл), который умеет только хуярить по тз и когда надо запилить проект с нуля, особенно на незнакомом языке — у меня глаза разбегаются.
Но правда конечно в том, что если мне разжуют проект, то я останусь на том же уровне, очевидно. С другой стороны, если разжуют аккуратно, давая лишь примерное направление — может чего и выйдет путного.
>>23966
>устроиться на работу
Ну это понятно, я хочу немного покодить прежде чем туда устраиваться.
В любом случае уже решил через EAP
https://www.jetbrains.com/go/nextversion/
1
2
3
4
но выводит бесконечную последовательность...
Притом то такой такой цикл работает как надо:
n:=1
for n<5{
fmt.Println(n)
n++
}
Помогите пожалуйста
Бляяяяя. Я сейчас от стыда в окно выйду. Жаль что на дваче нельзя удалять свои посты. Сори за щитпост
> Я умею программировать, но я всё ещё долбоёб (мидл),
Тогда тебе тем более курсы не нужны. Сеньором тебя сделает опыт и архитектурные навыки, которые тоже опыт. Многой работай над сложными проектами, чтобы его получить.
Успел поработать над одним, потом менеджмент сделал ход конём и запилил проектную команду, а я остался за бортом лениво подкостыливать легаси, уровень задач упал до плинтуса, по сути больше половины задач — стажёрские/джуновские, от чего хуёво и мне и бизнесу (мне — понятно почему, бизнесу — от того что стреляет дорогими бронебойными снарядами по небронированным целям)
Где написано что я не работаю? Мой трудовой договор утверждает прямо противоположное.
Одного проекта мало, чтобы подняться как бы над проектом и смотреть на него уже с архитектурной точки хрения, нужна насмотренность. Когда сделаешь одно и то же 5-10 разными способами и в половине случаев обосрешься, то вот тогда уже сможешь сравнивать и делать выводы.
В-общем, путь уже от миддла до сеньора занимает года 4 фулл тайм работы над разными проектами, сложными и чтобы один отличался от другого, на мой взгляд. Чтобы в одном ты делаешь апи, в другом работаешь над стримингом, в третьем разрабатываешь конструктор и тд и тп.
почему просто не взять опенсорсный православный вскодиум/вим? единственный раз когда у меня появлялось мозжечковое желание попробовать голанд это когда в самописный голандовский плагин нашей компании добавили удобные фичи, заменяющие часть (5 минут) работы руками
Потому что вим это не IDE, а просто редактор и даже если ты до жопы обмажешься плагинами, то не сможешь сделать из него IDE?
Не знаю насчет го, но с другими языками IDEA творит прям чудеса, встроенный рефакторнг, генерация, темплейты и так далее позволяют писать код практически без нажимания на кнопки, просто хоткеями. Вим в лучшем случае пародирует такую мощь.
Другой вопрос, что почти все разработчики используют возможности IDE процентов на 5, просто как редактор, а потом ещё и начинают что-то вякать про вим. Долбоебы, одним словом. Джетбрейновские IDE умеют делать прям пиздец сколько много всего полезного.
хз, я конечно всех фичь не знаю, но штуки уровня вынести кусок кода в отдельный метод/переименовать метод во всем проекте/запустить генерацию или отдельный тест постепенно в редакторонезависимые лэнгуеч серверы мигрируют. а часть хуйни все равно из консольки приходится использовать
лично я с разной стпенью эпизодичности помимо го/sql там луа/петон/баш/петон использую и не иметь необходимости настраивать/привыкать к несколькиим редакторам удобно. хотя конечно кому-то норм, холиварный вопрос возможно в го треде это обсуждать не стоит
Ебашишь 5 задач на степике
Воуля у тебя есть ключ на 3 месяца
Повторяешь данный механизм через 3 месяца
У тебя манжара? Что за IDE?
Лучше пользоваться полностью бесплатным VS Code, потому что лицензия может закончится в самый неподходящий момент, а потом перейти на другую IDE будет сложно.
Кроме того VS Code ест мало памяти, а продукты от жидбрейнс со старта сжирают по 4 гига.
>а продукты от жидбрейнс со старта сжирают по 4 гига
Это само по себе не самое смешное.
Самое — это когда у тебя игры на разогнанной с поджатыми таймингами ОЗУ работают стабильно часами, а pyCharm вешает нахуй всю систему.
Это штеуд, шиз.
Сегодня не существует железа, которое бы не бустилось от разгона памяти, всё давно упёрлось именно в неё.
Шизоид, что ты там на интеле озу бустил, кому ты пиздишь, такой хуйней только на амд занимаются
А есть перевод?
Сам возьми да проверь.
Особенно кекаю с того, что их все еще нельзя в методах типа использовать
Определяюсь между
https://github.com/uber-go/fx
https://github.com/google/wire
https://github.com/samber/do
или вообще ничего не прикручивать
меньше боейлерплейта, больше чистоты в мейн файлике.
Не знаю, в общем-то и хочу попробовать ради попробовать
Зависимости же в любом случае должны будут прокидываться через слои кода. Без контейнера количество передаваемых из фукции в функцию зависимостей растет как снежная лавина. Это общее для всех програм на всех языках.
Дело даже не в количестве, а в том что какая-то хрень по середине, которая к зависимости никакого отношения не имеет будет знать ее.
В структурно очень сложных проектах юзай fx. В простых и средних напрямую инжекти.
гугловый wire херня, а убер ужасно волшебный и неудобный
Если речь о монолите то не оверкил и не антипатерн. Какой нахуй антипатерн, это основа любого фреймворка IoC, composition root. Если в твоей гошке адепты простоты, которая как известно хуже воровства, развели детский сад то это не значит что весь остальной мир - анипатерн.
Не корми залетного школьника, анон.
Один только ты в белом пальто и с револьвером....
https://learn.microsoft.com/en-us/aspnet/core/fundamentals/dependency-injection?view=aspnetcore-7.0
https://docs.spring.io/spring-framework/docs/3.2.x/spring-framework-reference/html/beans.html
https://symfony.com/doc/current/components/dependency_injection.html
https://laravel.com/docs/10.x/container
https://angular.io/guide/creating-injectable-service
https://vuejs.org/api/composition-api-dependency-injection.html#inject
А хоть джун или просто вообще мимо прогинга? Почему вам аргументы приводишь, может быть и ошибочные, а вы только квакаете НИНУЖНА! ХУЙНЯ!. Хули вам трудно по пунктам разобрать что не так, если вы такие профи? Как у Омара Хайма:
Мастер просто говорит о сложном,
А подмастерье — сложно о простом.
Что не ясно во фразе "оверкилл", как и сказал тот анон выше? Это банально юзлесс мусор
Покормила
Это все эвфемизмы для слова ХУЙНЯ, а не аргументы. Что непонятного в словах "для монолита"? Для микросервисов то ежу понятно, что некуда приткнуть этот DI.
Напоил
https://old.reddit.com/r/golang/comments/1198e5j/golang_isnt_java_and_type_embedding_isnt/
https://old.reddit.com/r/golang/comments/112vfr3/how_to_deal_with_java_developers_polluting_the_go/
Ряяя, так нельзя. Вы НЕПРАВИЛЬНО его используете. Детишки, щас вам немножко покажут кусочек взрослого мира, напишут аналог спринга, научат писать по паттернам. Ну а потом этот язык выкинут нахуй, ибо никому го не нужен и лучше все эти вещи делать на джаве, в которой есть абсолютно всё и не надо изобретать велосипед.
Ты из тех, у кого один язык на всю жизнь? Или те, кто учат их >1 года?
Я бы лучше застрелился чем писал на джаве и спринге. В го такого фрейма никогда не будет
Использовал fx, wire и самописный.
Пришёл к следующему выводу: на монолитах в принципе можно жить в fx, на микросервисах и средних размеров сервисах DI для инверсии зависимостей нафиг не нужен - он только добавляет лишней магии в код. Лучше руками прописать адаптеры-коннекторы и прокинуть куда надо.
В кровавом интерпрайзе я обыно вижу что пилят что-то, заточенное под свою инфраструктуру, и там инициализацию большей части зависимостей вытаскивают в отдельный модуль.
А как ты собираешься это сделать? Тебе нужно будет тогда передавать указатель, а значит еще и следить за ним в маре каким то образом, ибо при передаче копии - тебе пришлось бы делать статическую структуру например, потом свои методы хеширования тоже ебала еще та, решение проблемы коллизий слыхал?
type myType {
valueInt int
valueStr string
}
func (t myType) Equals(otherObj myType) bool {
if t.valueInt == otherObj.valueInt && t.valueStr == otherObj.valueStr { return true
}
return false
}
func (t myType) HashCode() int {
return t.valueInt.HashCode() ^ t.valueStr.HashCode()
}
Да в принципе можно сделать. Я думаю даже пакеты есть уже (с дженериками). Надо бы поискать
> при передаче копии
Да, это проблема, но проблема не фатальная.
> потом свои методы хеширования
В стандартной библиотеке есть пакет maphash специально для кастомных реализаций хэшмап
> решение проблемы коллизий слыхал
Для решения проблемы колиззий есть сто-пятьсот методов, которые можно посмотреть как из существующих хэшмап того же го, питона или эрланга, так и из каких-нибудь статей по CS
Вообще запилить свою хэшмапу на дженериках для type HashKey[E] interface {
Hash(*maphash.Hasher)
Equal(E) bool
} - звучит как прикольная задача для выходных
Потому что это го, тут все через жопу.
Причём тут указатель?
Речь о дженерик мапе
https://go.dev/play/p/sGylE0Q9mz3
Иплементируй equal и hash для нужного типа и используй хоть указатели, хоть прямые значения
>2023 год
>гоферы выясняют, возможно ли все-таки сделать обобщенную реализацию хэшмапы
Индустрия, которую мы заслужили...
Делай скидку на /pr, тут сидят в основном миддлоджуны. А судя по некоторым постам, так и просто сварщики с фрезеровщиками
>миддлоджуны
Чел, хэшмапы на первом-втором курсе проходят, але (алсо напоминаю, что джун - это разработчик с опытом 6-12 месяцев и 1-2 проектами (разработчик без прод опыта называется "стажер"))
Алсо, дело не в /зк, мой коммент относился именно к го и его команде разработки (в основном к самому пайку конечно, нынешние мейнтенеры превозмогают как могут; но в целом го-вей - это именно (нахерачить говна, а потом все переписывать^W^W^W^W^W^W) игнорировать давно исследованные и хорошо известные вещи)
> но в целом го-вей - это именно (нахерачить говна, а потом все переписывать^W^W^W^W^W^W) игнорировать давно исследованные и хорошо известные вещи
Насколько бы я сам был не согласен с некоторыми вещами в го, в данном случае ты доебался к очень странному месту. В го есть нормальная хеш мапа, а именно обычный map, который работает для всех сравнимых типов. Желание в качестве ключей использовать всякие объекты в любом случае странное и вас действительно никто не заставляет использовать именно встроенный map, ограничения которого известны - вы вполне можете взять любой другой.
При этом: можно ли было сделать в стандартной мапе поддержку интерфейсов? Можно. Было бы лучше? Ну наверное было бы. Является ли это значимым косяком? В моём случае точно нет, за 5+ работы гошником я не упёрся в это ни разу.
Вот дженерики поздно зарелизили - это да. Зарелизили их неполноценными - это да. Не имплементировали их в стдлиб - это да. Нет нормальных енамов в языке - да. Всё на указателях, которые нихера не безопасные - да. Пол-кода делается на zero values вместо нормального нуллабилити - да. кстати почти всё это решено в rust :3
Вот такие предяъвы я бы почитал. Но почему-то никто их не пишет, вместо этого придираются ко всякой ерунде, то к большим и маленьким буквам (который public / private), то вот к мапам зачем-то.
Скорее попытки использовать язык в нише, для которой он и не предусматривался.
для запиливания того же докера это было не нужно
>Вот такие предяъвы я бы почитал. Но почему-то никто их не пишет
в каждом треде по несколько раз обсирают женерики и жалуются что никакврасте
>вас действительно никто не заставляет использовать именно встроенный map, ограничения которого известны - вы вполне можете взять любой другой.
>>нахерачить говна, а потом все переписывать
>Вот такие предяъвы я бы почитал
Так моя предъява и была в том, что дебил в малиновом пинджаке ниасилил параметрический полиморфизм, встал в позу и начал всем доказывать, что НЕНУЖНО и ГОЙ-ВЕЙ, в итоге спустя 10 лет разумеется все равно пришлось все запиливать (кто бы мог подумать), только теперь помимо десяти синтаксисов для объявления переменной будет десять синтаксисов для мапы или чего угодно еще, ведь ГО ИЗ ЭБАУТ СИМПЛИСИТИ. Да, и удачи попользоваться сторонними имплементациями стдлиба в языке, который абсолютно не может в метапрограммирование и в котором даже сраные итераторы гвоздями прибиты к встроенным типам и нет интерфейса, который можно было бы реализовать. Ведь ГО ЭТО ПРОСТОТА, так что давайте будет десять разных синтаксисов для итерации по коллекции. А еще давайте запилим в стдлиб марсианский шаблонизатор, но вот мап и фильтер давай программирувай в каждый проект сам(про обработку ошибок я вообще молчу, ну го просто не является типизированным языком в полном смысле этого слова)
>Вот такие предяъвы я бы почитал.
Короче это все об одном и том же, и причина тут именно в безблагодатности изначальных авторов, и ладно бы они сидели у себя в подвале и дрочили друг другу письки, но нет же блядь, им дали тонны денег и зафорсили это поделие, которое при этом реально закрывало реально имеющуюся потребность, но сука блядь, из-за своего невежества они вместо того, чтобы сделать нормально, накормили нас говном, и теперь приходится его есть без всякой объективной на то причины, и не было никаких причин делать это говно кроме личной прихоти хуесоса в малиновом пинджаке, и это все минорные вещи которые просто блядь любой комплюктер-сайенс студент мог бы задизайнить нормально, это не сопромат и не имплементация рантайма, в том и бугурт, что это минорные и элементарные вещи, но в них насрано, ой короче идите нахуй, пойду нажрусь, как раз сегодня пятница
И да, паблик\прайват заглавными буквами - это просто комически плохое решение, лол, пожалуй худшая косметическая фича в истории дизайна япов
>вас действительно никто не заставляет использовать именно встроенный map, ограничения которого известны - вы вполне можете взять любой другой.
>>нахерачить говна, а потом все переписывать
>Вот такие предяъвы я бы почитал
Так моя предъява и была в том, что дебил в малиновом пинджаке ниасилил параметрический полиморфизм, встал в позу и начал всем доказывать, что НЕНУЖНО и ГОЙ-ВЕЙ, в итоге спустя 10 лет разумеется все равно пришлось все запиливать (кто бы мог подумать), только теперь помимо десяти синтаксисов для объявления переменной будет десять синтаксисов для мапы или чего угодно еще, ведь ГО ИЗ ЭБАУТ СИМПЛИСИТИ. Да, и удачи попользоваться сторонними имплементациями стдлиба в языке, который абсолютно не может в метапрограммирование и в котором даже сраные итераторы гвоздями прибиты к встроенным типам и нет интерфейса, который можно было бы реализовать. Ведь ГО ЭТО ПРОСТОТА, так что давайте будет десять разных синтаксисов для итерации по коллекции. А еще давайте запилим в стдлиб марсианский шаблонизатор, но вот мап и фильтер давай программирувай в каждый проект сам(про обработку ошибок я вообще молчу, ну го просто не является типизированным языком в полном смысле этого слова)
>Вот такие предяъвы я бы почитал.
Короче это все об одном и том же, и причина тут именно в безблагодатности изначальных авторов, и ладно бы они сидели у себя в подвале и дрочили друг другу письки, но нет же блядь, им дали тонны денег и зафорсили это поделие, которое при этом реально закрывало реально имеющуюся потребность, но сука блядь, из-за своего невежества они вместо того, чтобы сделать нормально, накормили нас говном, и теперь приходится его есть без всякой объективной на то причины, и не было никаких причин делать это говно кроме личной прихоти хуесоса в малиновом пинджаке, и это все минорные вещи которые просто блядь любой комплюктер-сайенс студент мог бы задизайнить нормально, это не сопромат и не имплементация рантайма, в том и бугурт, что это минорные и элементарные вещи, но в них насрано, ой короче идите нахуй, пойду нажрусь, как раз сегодня пятница
И да, паблик\прайват заглавными буквами - это просто комически плохое решение, лол, пожалуй худшая косметическая фича в истории дизайна япов
го вей, хули, накласть говна и потом переделывать
>>28136
>rust
И да, в том и бугурт, что раст - значительно более низкоуровневый язык, и он тупо хуево подходит для области применения ГОвна. ГОвно скорее сравнивать с окамлом, но сука, если сейчас про окамл начнем говорить я точно нажрусь нахуй
я вот лично не хочу чтобы в местах вызова была мысль в задней части головной корочки что эта хуйня может оказаться nilом. ну и дергается эта логика ну раз 10-100 в день т.е. по сути на перф похуй. но бля меня мучает вопрос а на самом ли деле rule of thumb што на большие структы нужно возвращать поинтеры это не залупа собачья?
>inb4 духота про профайлинг
> Так моя предъява и была в том, что дебил в малиновом пинджаке ниасилил параметрический полиморфизм, встал в позу и начал всем доказывать, что НЕНУЖНО и ГОЙ-ВЕЙ, в итоге спустя 10 лет разумеется все равно пришлось все запиливать (кто бы мог подумать
Я бы мог тебе рассказать, что го это ни разу не первый язык Робба Пайка и что до этого у него во всех языках были дженерики и поэтому они для него более чем осилябельны. Но зачем что-то доказывать фанатикам?
На маленьких объемах тебе вообще похуй, всё что угодно будет работать быстро. А на больших объемах, если у тебя ещё и стек вызовов большой, то за такое большое количество копирований тебе никто спасибо не скажет.
Но вообще тут нужен баланс, слишком большое количество указателей это тоже неприятно и гц может начать захлёбываться.
Вообще обычно правила такие, что маленькие структуры можн опередавать и по значению, а большие всё же лучше через указатели.
Да, это небезопасно, но ты как бы на небезопасном языке пишешь, смирись или выбирай другой язык.
слыш так бля епта. ты же повторил что я в посте упомянул про правило большого пальца но только обосрал язык за небезопасность
Я тебе развернуто объяснил, что на маленьких объемах похуй, а на больших будет заметно.
Нужно изменять - возвращай указатель, ненужно изменять - возвращай копию.
Ну либо везде в проекте возвращай указатель (при условии что на производительность похуй (если не похуй то >духота про профайлинг)).
>что до этого у него во всех языках были дженерики
В каких "всех", перечисли пожалуйста. Из полноценных я знаю только лимбо, в котором он был только лишь соавтором, и очевидно многими вещами занимался не он, а его коллеги.
>поэтому они для него более чем осилябельны
Еще раз, можно было с самого начала подумать, добавить параметрический полиморфизм (не "дженерики") и зафиксировать синтаксис с учетом возможности дальнейшего расширения. Вместо этого они: а) встали в позу с мантрами про го-вей и симплисити; б) спустя 10 лет сделали ровно то, о чем им говорили с самого начала (и то недоделали), но теперь с добавлением 9000 разных синтаксисов и необходимостью переписывать кучу либ (да-да, формально обратная совместимость не нарушена, возьмите конфетку блядь). К тому же они сами в своем блоге писали о том, что были не уверены, как реализовать дженерики в го, но видимо для тебя это мнение "фанатиков".
Алсо, если ты смотрел первые гугловские презентации пайка, то сам мог видеть, что он хуево ориентируется в плт и путается в простых вещах
>В моём случае точно нет, за 5+ работы гошником я не упёрся в это ни разу
В пистоне я очень часто делал сеты для проверок уже имеющихся объектов. Для своего класса было достаточно реализовать пару магических методов. В го мне сказали, что все это нинужна.
ну хорошо што про размер стека упомянул, но например такая хуйня (на зашкваренном медиуме) есть https://medium.com/@philpearl/bad-go-pointer-returns-340f2da8289
(еще результаты бенча у меня нихуя не сходятся со статьей пиздос лмао)
и наверное нужно понять когда объемы считать большими а когда нет........ вот допустим у меня в структе там 20 int64 и 20 строк = 40*8 байт. кажется что бля достаточно большой но так ли это мистер фриман?
>Нужно изменять - возвращай указатель, ненужно изменять - возвращай копию.
это же больше к ресиверам в методах относится? изменение полей же не переаллоцирует структ
>И да, паблик\прайват заглавными буквами - это просто комически плохое решение, лол, пожалуй худшая косметическая фича в истории дизайна япов
__такой_хуйни_навалом()
Я там думал дописать кое-чего и им потом реквест создать - так выяснилось, там уровней сложности даже несколько. Интуитивно кажется, что fx должен быть тонкой обёрткой вокруг dig - но на самом деле нихера и там по сути два контейнера, один собственно fx, а второй уже dig. Зачем так сделано - непонятно.
Короче, никогда не используйте код от убера в качестве примеров, так как делают они- делать не надо. Прочих их либ это тоже касается, они даже из сраного логгера, который как бы не рокет сайнс ни разу, ухитрились сделать самолёт.
ты проебал немного в условии цикла.
Ты пишешь "1<5", т.е. если переводить на человеческий - "ПОКА 1 (АДИН!!!) меньше 5 то {Действиие}", у тебя единица всегда меньше пяти, т.е. всегда TRUE.
Тебе нужно писать не 1, а переменную i.
Как только переменная i станет больше или равно 5, то будет нужный тебе результат.
Хватит следить за мной
Спорно, но спасибо за мнение, годный постинг.
Это потому что Го не предназначен для DI, а не потому что код писали """неправильные программисты""". Гугловый DI выглядит еще уебищнее чем uber/fx, потому что - ненужно. Пишите маленькие сервисы и инжектите все руками в инит().
Ты не прав и я как раз писал о другом. fx можно использовать и это нормально выглядит в итоге, особенно удобно, когда у тебя много разных тестов - и тогда ты в каждом пакете отдельно объявляешь var Module = fx.Provide(...) и потом нужные модули подключаешь в контейнер, выглядит похоже на аннотации в той же джаве.
Я же писал о том, что fx хуёво реализован под капотом. Невозможно ничего понять. Я сам писал рантайм di контейнеры и знаю о чём говорю, можно куда качественнее код написать.
> Пишите маленькие сервисы
Вот это распространённое заблуждение, как и то, что "Го - язык для микросервисов". Не бывает в жизни исключительно маленьких сервисов, или ты делаешь что-то не так. Бизнес-логика всегда сложная и разветвленная, у тебя всегда много сценариев и хотелок, в рамках одного бизнес-юнита.
У меня было такое неоднократно, к примеру, ты начинаешь писать сервис для какого-нибудь скоринга пользователей и начинается: ты читаешь несколько топиков кафки, чтобы получать все необходимые эвенты. Ты отдаешь паблик апи для фронта, ты отдаешь интернал апи для каких-то внутренних бэкендов и админки, у тебя есть планировщик, который подводит какие-то результаты, у тебя есть разные рейтинги и разные стратегии их расчета, которые применяются в зависимости от необходимой фазы луны, это всё конфигурируется и тд и тп. Если разбить это на миллион grpc сервисов, то ты просто получишь распределенный монолит и будет ещё больнее.
> инжектите все руками в инит
это нормально работает в случае одной main или какого-то небольшого их количества. Но когда у тебя к примеру появляются тесты, а особенно интеграционники, то уже становится больно, потому что каждый тест требует той же инициализации, но периодически со своими особенностями, всякими моками и заглушками. В случае с ручным инитом это приводит к адовому копипасту очень быстро.
Ну и самих команд может быть дофига.
Как вариант, можно делать ручной di в main и отдельно юзать контейнер в тестах и это тоже ок.
>Бизнес-логика сложная
Может тогда просто взять полноценный язык (да с полноценной системой типов) для написания сложной бизнес-логики? Ах да, ведь мы уже наняли команду 300кб\наносеков-гошников, ну тогда ладно, авось спустя полгода что-нибудь и высрут. Зато памяти сэкономили.
Го нормальный язык для написания бизнес-логики, не пизди. Интерфейсы есть, типы есть, функции есть, условия есть. В целом это минимальный набор. Не идеальный, но достаточный, чтобы писать сложную логику. Писал 100500 сложных проектов на го и именно с го проблем особо не было, брат жив. Дженерики побогаче бы конечно и в стдлиб побольше всяких filter() и map(), но это уже хотелки.
Существует множество бизнес областей (да почти все на самом деле), где достаточно развесистая логика, чтобы она вылезала за 100к строк, но при этом она не настолько сложная, чтобы ради этого начинать заниматься метапрограммированием. Более того, если ваша логика заставляет вас заниматься метапрограммированием - то возможно у вас джава головного мозга и вы зря нафигачили абстраций поверх абстракций.
Конечно же, любого тьюринг-полного языка хватит чтобы описать любую бизнеслогику! Брейнфак форевер!
Он же сказал "не идеальный"
Что конкретно нелогично? В го туре сказано, что это просто указатель на основной массив, как и сказано то, что при расширении он уже перестанет быть указателем, что логично, ведь иначе ты не сможешь добавить в него элементы, ибо length > capacity, а значит нужно аллоцировать с нуля, что конкретно тут не логично?
без остановки вертит сук мой нетполлер
селектом взял твои каналы за яичники
контекст отменится из них выйдет ошибка
коллега не заюзал gofmt раскрошил ебало
второй роба пайка не уважал раскрошил ебало
написал женерик функцию раскрошить ебало
убил всех джавистов но мне этого мало
мне этого мало
рублю бабло
рублю бабло
рублю бабло
на го
рублю бабло
рублю бабло
рублю бабло
на го
Нужно было делать две сущности: срез как неизменяемый указатель на массив со строго фиксированными размерностью и ёмкость, и вторую - динамический массив, где нам без разницы что там внутри, а важно лишь, чтобы он хранил наши значения.
разве не так сделано?
Массивы с детерминированым количеством элементов
Динамический слайс на базе массивов
Или ты хочешь нетипизированную фигню как массивы в пхп?
И чем они отличаются? Тип-то один. Нельзя написать допустим так:
func (final pArray []int) {
append(pArray, 5) //error!!!
}
Слово "митинг" если чё тоже было широко употребимо в прошлом веке, уточка.
Напиши аналог тайпскрипта для голанга, чтобы он компилировал расширенную статически строготипизированную версию голанга в читабельный голанг.
Сразу набегут тысячи хомячков и скажут, что не нужны нам енти ваши монады, писали err != nil и будем писать
к тому же нахера компилироваться в голанг, у него же инфраструктура по факту куцая
Это нормальная абстракция поверх массивов, к примеру в расте тоже есть слайсы и они работают почти так же.
Неочевидность здесь исходит просто из постановки задачи: ты хочешь иметь непрерывный блок значений в памяти и обращаться к нему, как к переменной - и при этом хочешь уметь аппендить в него значаения сверх лимита. Это автоматически означает, что тебе нужно перевыделить память и переключить переменную на новый блок в памяти.
Это же тебе не список, который по всей куче может быть размазан и который потом gc заебется сканировать.
К гошной реализации можно придраться только с точки зрения дизайна функции append.
Но в реальности ты проблем с этим не испытываешь. Просто держи в голове два правила:
1) Вообще всегда присваивай результат аппенда в тот же слайс: foo = append(foo, ...) - кстати есть линтеры, которые за этим следят.
2) По возможности не пытайся менять саму переменную слайса, всегда возвращай новое значнение. Ну примерно как функция append делает. С мапами кстати аналогично.
с мапами аналогично что
>к тому же нахера компилироваться в голанг, у него же инфраструктура по факту куцая
Быстрый ГЦ, горутины с вытесняющей многозадачностью, нативный бинарник без VM, есть ансейф, так что при желании можно и 2 указателя сложить. По первым двум пунктам только Эрланг может чем-то подобным похвастаться. Если бы не хуевый дизайн языка, то вообще был бы топ язык для прикладных приложений.
Линейные типы? Не, не слышали. У нас же ПРОСТОЙ язык, нужно просто держать в голове два 9000 правил.
Ну если совсем без траллинга, то в целом я согласен. Но я про куцесть скорее про либы писал - их все-таки значительно меньше и они более худшего качества, чем елсевере.
</совсембезтроллинга> Да и к тому же размер бинарников у го и граальвм почти одинаковый, а если не видно разницы, то зачем жрать ГОвно?
ололошеньки - лоло
>Dependabot no longer alerts on vulnerabilities for dependencies found in go.sum files.
https://github.blog/changelog/2023-03-07-dependency-graph-removes-go-sum-support/
Потому что go.sum может показывать несколько версий сразу, например если ты используешь third-party пекейджы, потому лучше смотреть только в go.mod
>Да и к тому же размер бинарников у го и граальвм почти одинаковый, а если не видно разницы, то зачем жрать ГОвно?
Если лум и правда реализует все обещанные фичи, то может и правда будет конкуренция.
С другой стороны многих Го подкупает кажущейся простотой. до того самого момента, пока проект не разрастётся и простота не начнет мешать.
че ты мне тут корявого лепишь?
Что тут произошло:
Секурити-офицеры сначала родили какую-то машинку, но потом обосрались и потом откатили свои ахуенные истории.
Буквально коммент депендабота
> 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.
Simple != easy. Никакого симпл димпл в голанге и близко нет, такое же минное поле из костылей, как и кресты, просто по объему меньше.
А лум - да, уж не знаю, доживу ли до того момента, как они все допилят.
>Никакого симпл димпл в голанге и близко нет, такое же минное поле из костылей, как и кресты, просто по объему меньше.
Го легок для чтения, с ним практически никогда не возникает вопросов "что эта функция делает" и "как реализовать эту функцию" всё примитивно и прямолинейно. Просто берёшь и кодишь. Много кодишь потому что язык многословней даже Джавы.
Да. Тут большой плюс в гошке, что можно просто лазить по искодникам используемых пакетов они легко читаются. Не в пример даже Ларавелю какому-нибудь с его фасадами. Хер пойми откуда он что берет и куда перекладывает... Только дебагером.
мимо пыхарь
Хорошо что деды которые гошку проектировали не стали туда макросы пихать как в своей любимой сишке. Или им зумер начальник из гугла запретил это делать.
>Го легок для чтения
Язык не может быть "легок" или "сложен" для чтения. Легко или сложно читать может быть конкретный код. На любом языке можно написать как трудный для понимания код, так и легкий для понимания код.
Бой некорректному мышлению!
Коректность не должна превращаться в шизу, игнорируя подразумеваемый контекст. Обсуждается средняя температура по больнице - читабельность языка. Пока ты не устроишься на проект, тебе его никто не даст почитать. Выберешь трудночитаемый язык - придется либо тянуть лямку, либо бегать от проекта к проекту теряя время на испытательном сроке.
>трудночитаемый язык
Опиши, как (можно на глазок) померять трудночитаемость языка, и почему условный го трудночитаемей условной джавы.
язык можно назвать легким для чтения, если весь/почти весь код, написанный на нём, легок для чтения. это называется метонимия
>если весь/почти весь код, написанный на нём, легок для чтения
Ну да, а если я закину на жидхаб 9000 тонн говнокода на языкнейм, то это сразу магически изменит собственные качества языкнейма. Давайте-ка без вот этой глупой гуманитарщины, язык - это формальная система.
Шизам, закройся!
>Ну да, а если я закину на жидхаб 9000 тонн говнокода на языкнейм, то это сразу магически изменит собственные качества языкнейма
strawman
>Давайте-ка без вот этой глупой гуманитарщины, язык - это формальная система
это дискас на форуме где принят разговорный стиль переписки, алё. доебываться до того, что "кипит не чайник, кипит вода в чайнике" это уровень б или уже выше?
В общем и целом - лучше указатели. Они универсальньнее с точки зрения типов и быстрее
Нет, но думаю появятся
> Сразу набегут тысячи хомячков и скажут, что не нужны нам енти ваши монады, писали err != nil и будем писать
Без гарантированно чистых функций монады - это карго культ для фанатиков.
Выбор языка, кстати, тоже вопрос скорее религии
чтобы что? это не const. назови метод нормально и всем будет понятно, что он ресивер не меняет. в местах вызова все равно в 99% случаев не видно какой ресивер, разве что когда в интерфейс пытаешься положить
Отнюдь.
Более того, гарантированно чистые функции - это карго культ для фанатиков.
За исключением 0.0001% случаев, где действительно нужна формальная верификация. Но и там в систему типов это тащить необязательно. Алсо, напоминаю про unsafePerformIO; так что там, хаскель с кого карго-культирует?
Напиши комментарий. Это го, не пытайся сделать из него выразительный язык, он таковым не является. Лучше по умолчанию делай указатели.
>быстрее
Ты скозал?
Процессору похуй, выделять 4 байта на указатель или 16 на структуру, будет одинаково быстро. (Кроме редких моментов с очень большими структурами, ОЧЕНЬ)
Во всем мире принято ставить указатель в принимаемый тип только основываясь на то, будет ли он изменяться внутри или нет
В мои руки попал проект с .go в конце.
Нужна среда разработки, чтобы запустить программу и потрогать её внутри
Еще не забываем про то, что указатели нужно еще и разименовывать, а значит уже больше действий, чем просто передать копию
К счастью, для такого есть даже отдельные инструкции
Скачай сам го, а проект можно открыть в любом тестовом редакторе с подсветкой синтаксиса. Самая популярная среда - VS Code, ещё есть GoLand, но она платная.
>Есть такое https://github.com/ahmetb/go-linq
Нечитабельное Go-вно.
>джавовые стримы спизжены с linq
Какие же шарперы тупые, это пиздец просто! Общая CS эрудиция отсутствует как класс.
Стримы в джаве чисто библиотечная вещь, никаких новых языковых конструкций в нем нет. В отличии от linq который сахар на сахаре, с сахарным сиропом. А сама идея идет из функциональщиных языков, мэп-редьюс, вот это все.
Оно не только нечитабельное, оно еще и медленное и нетипобезопасное. Типичный ГОвнокод тащем-то.
>Какие же шарперы тупые, это пиздец просто!
При этом сам шарп\дотнет ресерчат довольно крутые чуваки, у них там и эфшарп, и приблуды для формальных доказательств, да и в целом рнд сильнейший. Такая вот ирония.
>>36750
Джавовые стримы основаны в первую очередь на стандартной библиотеке кложи, т.к. главный архитектор джавы слегка фанбоит по кложе. Но в целом это все известные чуть ли не с 80-ых паттерны ФП.
Если легаси хуитка, которая деплоится в несколько инстансов и отвечает по REST API. Только один инстанс может обработать запрос от клиента. Остальные откидывают кастомную жысонину, мол "не могу обработать". Типа мастер есть. Вот как лучше всего писать клиент к такой ебанине, если известны адреса каждого инстанса? Или это можно решить на уровне инфраструктуры и спрятать все это говно за какой-нибудь хитрой проксей?
а нахуй они так сделали?
>Вот как лучше всего писать клиент к такой ебанине, если известны адреса каждого инстанса
ну просто делаешь обертку для хттп.клиента (или в него кастомный транспорт закидываешь, который тупо обертка над дефолтным с логикой фейловера). если запрос фейлится, то идешь раунд робином, пока один из адресов не ответит. если ответил, то дефолтишься на него.
>Или это можно решить на уровне инфраструктуры и спрятать все это говно за какой-нибудь хитрой проксей?
а хули они так не сделали?
Не хочу велосипедить клиент, да еще и такую хуету писать с перебором. Хотелось бы это решить как-то изящнее. Изначально все писали долбаебы-студенты, которых наняли за копейки.
Разве на работе не пишут веб-приложения? Мне казалось это основное направление го-разработки.
Ты путаешь веб-сервер, который сидит жопой в интернет и в современных условиях работает реверс проксей, и аппликейшен сервер, который уже работает с твоим приложением.
Писать самому второй, а тем более первый это бессмысленная задача, потому что их дохуя и они написаны и вылизаны людьми поумнее тебя.
Дак что в итоге пишут на го?
>Кому-нибудь удалось написать свой веб-сервер? Ну не просто, который отдаёт всем хелловорлд, а полноценный, который можно использовать для написания коммерческих веб-приложений
разработчикам го))
>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
у челика жава головного мозга, не суди строго
ну и челик который ревьюит просто картина маслом
>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
>Сейчас читаю книжку Адама Фримана Pro Go
>Apress
Чел... Книгами этого издательства только подтираться или на растопку печки. Читай книги от Manning, O'Reilly или хотя бы The Pragmatic Bookshelf.
Почитай для контекста любые статьи по архитектуре, тысячи их.
>При этом сам шарп\дотнет ресерчат довольно крутые чуваки, у них там и эфшарп, и приблуды для формальных доказательств, да и в целом рнд сильнейший. Такая вот ирония.
Нет никакой иронии, это всё закономерно. Хороший дизайн языка, это умение добавлять нужные фичи и не добавлять малополезные фичи, это умение выбирать такую реализацию, чтобы язык оставался консистентеым по стилю.
Есть говей когда нужные фичи не добавляются до тех пор пока уже станет невозможно нормально разрабатывать на языке. Есть шарпвей когда в язык тащат все прикольные фичи которые можно реализовать. Проблема шарпа не в том что его авторы криворукие, а в том что у них нет чувства меры.
Нет никакой иронии, это всё закономерно. Хорошее свойство вещи типа N, это наличие X и отсутствие Y. В подтипе N1 типа N - X минимально, а в подтипе N2 типа N - Y максимально. Проблема N2 в том что производитель N2 добавил слишком много Y.
Ну зато там есть Blazor и можно написать фронт на сишарпе, а на голанге так нельзя. Надо будет учить жс/тс и фреймворк реакт/ангуляр/вуе.
не знаю, по мне так в шарпе не так уж и много лишнего, с чувством меры все в порядке.
>Ну зато там есть Blazor и можно написать фронт на сишарпе, а на голанге так нельзя.
Говно какое-то. Или уж делать нормальный десктоп или не ебать мозг и делать на базе Электрона и веб технологий, главное преимущество которого это возможность реюзать 99% кода для веб версии и независимость от бекенда. А так GWT для C# получается.
>>39287
>не знаю, по мне так в шарпе не так уж и много лишнего, с чувством меры все в порядке.
1. LINQ это совершенно чужеродная с т.з. синтаксиса конструкция. Да еще неочевидно как работающая - как понять как будет делаться джоин 5 коллекций?
2. async/await - создает специальный класс async функций которые можно вызывать только из async функций или специальным образом. В Го можно любуй функцию запустить как горотину там есть вопросы с возвратом ответа, но все решаемо. А теперь этого мало, надо виртуальные треды делать.
3. Фич много, как правило есть больше одного способа реализовать фичу, команде приходится договариваться об общих подходах.
хз. у нас на го позицию можно устроиться пройдя собес на другом языке вроде пыхи/петона. с растом хз получится ли такое.
ну там же есть http.Server. почти на каждой работке его и юзали для создания коммерческих приложений
И что ты хотел сказать этими цифрами?
Учи АК и не еби нам мозги.
Смотри, чтобы найти работу на расте, нужно быть умненьким. Раз ты задаешь такие вопросы, то вполне очевидно, что ты тупенький. Поэтому если возьмешься за раст, то никогда не найдешь работу, а вот с го у тебя какие-то шансы все-таки есть, ибо го - язык для говнокодинга.
>а нахуй они так сделали?
Вот у вас есть контроллер, который обрабатывает поступающие запросы. На каждый запрос он получает из параметров инстанс переменную, например "@var". Её значение уникально для каждого запроса. Вот так приложение выполняет один и тот же код, но для разных входящих данных.
При дефолтных настройках вашего сервера, запросы встают в очередь и выполняются последовательно. Но если нагрузка начинает превышать возможности такого решения, то можно начать запускать приложение в нескольких инстансах. Это подразумевает выполнение одного и тоже кода в нескольких процессах (воркеры) или даже на разных серверах.
Пример: сервер распределяющий нагрузку (1 сервер) разделяет запросы на несколько инстансов (n серверов), где запущено одно и тоже приложение, но они все обращаются к одной базе (1 сервер).
Очевидно на мастер истансе!
Да вы оба не блещете умом.
гоферы хой победа наша
так остальные инстансы же не работают
Ты не понял. У тебя N инстансов одного сервиса. Только один из них может обрабатывать запросы по REST API. Остальные тебе вернут ошибку. Т.е. там роли у такого "кластера", где один мастер, который все запросы обрабатывает.
Я вообще на говне мамонта писал. Но меня заставляют на го. Мне нравится шарп,, но мне платят за то, чтобы я учил го.
Ты дрянь, я не могу тебя любить, но не хочу ненавидеть.
Ты не тот инструмент, на котором я способен писать.
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)
>Плодить копипасту?
Да, это же ГО - язык для ГОвнокода. Но дженерики (кастрированные) уже джва релиза назад завезли - теперь осталось только переписать все библиотеки, ура.
>Вот у меня есть задача перекладыания сущностей их источника в хранилище.
Если хочешь заморочиться, то можешь написать кодогенератор (см. go generate). Но разумеется так как мы в ГО треде, а ГО - это язык для ГОвнокода, тебе придется прям парсить и генерить текстовые файлы, т.к. про метапрограммирование и лисп-макросы роб пайк не слышал инб4: слышал но у него гой-вей!!1. Поэтому смотри сам, что проще.
В целом, при написании го главное поменять отношение. Не пытайся сделать "правильно" или "красиво", ну или "эффективно". Нахреначь как попало чтоб оно хоть как-то работало, притом поддержку желательно скинуть другой команде или свеженанятому джуну. Если какой-нибудь хер из другой команды решит на тебя позалупаться, то отвечай, что он хуй и ничего не понимает, а твой код соответствует the go way.
> дженерики (кастрированные) уже джва релиза назад завезли
За два дня я сделал вывод, что дженерики в го завезли примерно так же, как альтернативную военную службу в России. Ты должен пожалеть об этом.
А какие дженерики тебе нужны? Чем гошные хуже джавовых? Что такого ты хочешь с ними делать?
Давай начнём с дженерик методов. Продолжим мапой без interface{}.
Я вообще не понимаю, почему го получил такую бешеную популярность. Что в нём суперкрутого? Лаконичный синтаксис? На да, на том же шарпе это пишется более жирно. Но блин, я ещё не встречал языка, на котором я должен неделю думать, как мне выразить мысль, который ставит мне палки в колёса - туда нельзя, сюда нельзя, но если вы возьмёте void, oops I mean interface{}.
Блядь, в 21 веке использовать void! Дийкстра в гробу вертится, замедляя вращение Земли.
Я сегодня про горутины и замыкания читал. Там вообще вынос мозга! К примеру, счётчик цикла горутина неправильно читает, а вот если его присвоить переменной внутри цикла, то уже всё норм.
Ты не понимаешь. Это го-вей. Сейчас все перепишут весь код на кастрированные дженерики, потом еще через 5-10 лет роб пайк прочитает какой-нибудь пейпер про тайпклассы и добавит дженерик методы, чтобы все переписали весь код еще раз. Кодинг крутится, лавешки мутятся, ВВП растет. Смекаешь? Понимать надо.
>Я вообще не понимаю, почему го получил такую бешеную популярность.
Ты не поверишь, но примерно 90% ПРОГРАММИСТОВ оценивают новый язык ровно по двум вещам:
1) синтаксису на примере хелловорлда
2) логотипу
Так что пиар гугла + логотип. Буквально это. Такая вот индустрия, добро пожаловать.
справедливости ради еще рантайм с гц и ксп из коробки в 2008 году
>счётчик цикла горутина неправильно читает, а вот если его присвоить переменной внутри цикла
это ты еще интерфейсы с нил не сравнивал Ты не понимаешь. Го - это простой язык. Го-вей - это ПРОСТОТА. Ну мне так чувак в пинджаке по телеютубу сказал. А ты кто такой? Вот он в гугле работает, а ты русский фашист хуесос с двачей.
Не могу вспомнить, кто сказал, что простые вещи должны быть простыми, а сложные - возможными. Вот го отлично справляется с первым. И никак - со вторым.
МЕня вымораживают коллекции с interface{}. Меня вообще вымораживают здешние коллекции - они НЕ ПРОСТЫЕ. Они простые в Perl, Они слишком простые в PHP. Они достаточно удобные в дабе и шарпе. Они блать ебанутые в go.
Интерфейсы вроде бы есть, но я пока не познал их дао. Но в стандартной библиотекте их нет. Нет никого ILogger или IDbCOntext. Просто в голове не укладывается - вот этим люди обмазываются и просят ещё!
Сука, он мне вместо войд-звёздочка курсив сделал :(.
>Вот го отлично справляется с первым.
>десять синтаксисов на каждую фичу
>неоднозначный парсинг после введение дженериков
>тонны подводных камней, некоторые из которых уже упомянуты выше по треду
>вообще лень опять перечислять очевидное
Нет, не справляется. Вот scheme - справляется, например. Да даже простихоспати луа какая-нибудь и то справляется
>ILogger
>IDbCOntext
А зачем ставить букву I перед названием интерфейса иметь это в стандартной библиотеке?
За аж неделю изучения языка пришел к выводу, что в го di не имеет смысла. В нем не принят полиморфизм, не принято делать стандартные абстрактные классы или интерфейсы. Без них di я вляется изощрённым способом почесать левой пяткой правое ухо.
не то чтобы совсем нинужно, но вообще нинужно. если там бля ну хендлеры ходят в сервисы, сервисы ходят в репозитории, репозитории ходят в бд, то инжектор говорит о чем? о том, что ребята скоро будут распиливать свой монолит, т.к. дохуя говна завезли и пытаются костылями скрыть сложность погружения в его код
>По возможности не пытайся
>Вообще всегда присваивай результат как надо, хотя язык этого не требует явно
Охуенный дизайн языка. Просто охуенный. Делайте как надо, а как не надо не делайте, но мы вас не заставляем, можно делать и совсем наоборот и ИНОГДА это будет иметь смысл!
Какую приложуху пишешь? Я все же подумываю бэкенд для несложной в плане графики игры запилить на гошке, но сомнения терзают.
Беттинг.
Переписываем парочку компонентов с питона на го, что бы с сеткой быстро работало. Думали остальную часть тоже переписать, но когда дело дошло до описания доменных моделей и работы с ними от идеи резко отказались.
Ты не путай, в рабочем коде слои изолируются через интерфейсы. То, что в стдлибе ничего не выведено на интерфейсы - так это просто разрабы мудаки, но это ж не повод за ними повторять плохое.
Так и не в стандартной. Все модули - кто в лес, кто по дрова, и гордятся своим специальным апи.
>почему го получил такую бешеную популярность
компилируемый + горутины из коробки + простой в освоении по сравнению с растом или cpp + gc
DI обычно не используется в гошке.
>компилируемый + горутины из коробки + простой в освоении по сравнению с растом
Таких языков десятки, если не сотни. Но у них нет финансовой поддержки гугла. и няффки-логотипа :333
эликсир, окамл, кристал, ди вроде тоже, и еще сотня более обскурных языков, я даже где-то список сохранял, лень искать
без поддержки (((корпораций))) все равно все дохлое
Подожди, но это хуёвый ответ.
Я тебя спрашиваю "что тебе не нравится в гошных дженериках?". Ты мне отвечаешь "в го нет мап без any" (кстати так и не понял о чём это ты) и дальше накидываешь про сам язык.
В итоге, ты пиздел на гошные дженерики, поясняй за них, что тебя в них не устраивает.
>>43505
Ты глупенький что ли? Это называется замыкание и происходит во многих разных языках, в том же js (ну со скидкой на то, что он однопоточный).
Если ты используешь в горутине какую-то переменную, а потом эта переменная изменится - то да, она изменится внутри горутины тоже. Абсолютно валидное поведение. Не хочешь, чтобы она менялась - то не суй в горутину то, что меняется снаружи.
Нельзя использовать в методах, нельзя использовать как уже говорили выше в мапах/слайсах, это сырое говно. Интерфейсы тоже не лучше, нельзя например сделать интерфейс с типами как параметр функций (нахуя тогда оно надо?) и это только то, что пришло сразу в голову, покопаться - еще больше пиздеца будет
другой анон
>нельзя использовать как уже говорили выше в мапах/слайсах
В качестве ключей в мапах и в качестве значений в мапах/слайсах можно.
> нельзя использовать как уже говорили выше в мапах/слайсах
можно
> нельзя например сделать интерфейс с типами как параметр функций
можно
Покажи, вот у меня есть функция, которая должна принимать либо int64, либо float32, либо string, как это реализовать в интерфейсе?
Так толсто, что даже тонко
Что тебе нужно, например от мапы? Не совсем ясно что ты хочешь с ней делать. С дженериками и мапами кажется в гошке все ок.
Я хочу хранить в мапе MyType. Я просто хочу хранить в мапе MyType.
Алсо, почему го - единственный ЯВУ, в котором я должен думать о ёмкости коллекции? Почему в го нет ArrayList?
Ну вот. Чтобы интерфейс был рисевером язык не поддерживает, нужно структуру сделать. А вообще пропозал был https://github.com/golang/go/issues/54347
И че это, мне каждый раз придется делать новый инстанс этого типа??? Это конечно круто, но обычно методов далеко не 1…
Факт фактом, что дженерики, что интерфейсы в гошке - сырое говнище
Яндексблядку не пичот!
>С дженериками и мапами кажется в гошке все ок.
Чтоб было ок, мапы должны быть не накостыленным встроенным типом, а обыкновенным Map[k,v], где к - компарабл.
Винда тоже платная и недешевая, и что теперь?
Дело не в дженериках, а в том, что методы для интерфейсов не нужно имплементить.
Их имплементят уже те, кто этот интерфейс хочет реализовать. Так что дженерик интерфейсы в качестве ресивера особо бесполезны имхо.
>Как проще
boolean, numeric, string, pointer, channel, and interface types, and structs or arrays that contain only those types.
Для обычного any, (который на самом деле interface{}), == определен.
А для типа, который ограничили any, уже == не определен. Вот такая хуйня.
То есть все, кто имплементит интерфейс, обязаны заниматься копипастой. Ну да, у нас же простой язык.
Так во всех языках, не? Интерфейс это просто набор методов, которые нужно заимплементить, чтобы реализовать этот интерфейс. По сути просто контракт, что такие-то методы реализованы у всех, кто заимплементил этот интерфейс.
Причем тут копипаста? Или ты про аналог default методов в джаве, которые хуй пойми зачем нужны?
Или про абстрактные классы, которые уже у себя имплементят часть поведения? От абстрактных классов решили отказаться. Даже в ООП языках их почти не используют сейчас.
Хорошо блять, смотри, у меня есть свой тип, у него есть дохуя методов, и мне нужна что бы метод например Add принимал в себя одновременно и int и float и еще какую то хуйню, а еще у меня есть соседний метод, который принимает в себя только float или int, как реализовать? С any - идешь нахуй
Микросервисы, блядь, делаешь? Родина дала легковесные потоки и горутины, а ты хочешь разнотиповые методы в одном месте собрать.
Да ну капитан очевидность, правда что ли? Я про это и говорю, или по твоему это недостаточно сыро?
Как в джаве такое сделать я уже не помню, не уверен, что там такое вообще можно было сделать, мб только если отказаться от дженериков и нагородить что-нибудь с иерархией наследования.
Про С++ хз, там наверное возможно поебаться с шаблонами и сделать как надо.
>>45609
А как в других языках такое делается?
А да, точно, это же Go Way - про GOвнокод
>нигде не видел дженерики
Может потому что они релизнулись в недавних апдейтах???
Мало того что проект с ними писать нужно, так они еще и не допиленные, так еще и самих разработчиков нужно научить использовать их
Кто виноват что ты говнокодер?
Как же они заебали со своей простотой...
Если у тебя статическая система типов, то она должна поддерживать параметрический полиморфизм, иначе это не система типов, а говно. Иначе ты не сможешь тайпчекнуть map :: (a -> b), [ a ] -> [ b ] или тривиально id :: a -> a.
Если у тебя язык, рассчитанный на хоть какое-то практическое применение, то тебе нужно решать expression problem[1] и поддерживать рантаймовый ад-хок полиморфизм, иначе не получится никакой модульной разработки. Это так или иначе приводит тебя к тайпклассам (а-ля х-ль) либо модулям\функторам (а-ля окамл), либо протоколам\клос в динамических языках. Это все если что было уже достаточно хорошо известно и исследовано в 90-ые. но читать вадлера - это не го-вей
Ну а дальше ты можешь накручивать систему типов, чтобы разрешить компилировать более широкий класс корректных программ, но за это придется трейдоффнуться сложностью системы типов, а в некоторых случаях еще и выводимостью типов.
[1]: https://en.wikipedia.org/wiki/Expression_problem
В смысле. Приведи пример кода, что ты хочешь сделать.
Кучу времени всякие долбоебы пиздели, что с го что-то не так. И в итоге стоило только начать предметный разговор, как выясняется что.. Вполне всё так. И дженерики рабочие, и мапы делать можно, и shadowing нормальный, и замыкание такие же, как и везде.
Очевидно, что здесь, как во всяких чатах в телеге, тусуется куча сомнительных личностей околоджуновского уровня, которые с уверенным видом вбрасывают в треды своё неквалифицированное мнение и самое главное, что может сделать нормальный человек - их не слушать.
Я так понимаю неудобные посты выше ты игнорируешь и для тебя они «недостаточны» или что?
Это же гофер. У него же религиозное сознание, как у яблочника.
Если закрыть глазки, то этого то и нету совсем!
Я просто не восьмибитный школьник, страдающий максимализмом и тем более не ведусь на "моду" любить или не любить какие-то языки.
Идеальных языков не существует и в какой ты не ткнешь пальцем, найдешь трешняк. Джава пиздец жирная с уродливой жирной экосистемой поверх спринга, с++ угроблен кучей магии и ансейф вещей прям в стдлибе и какими-то академическими уебанами в комитете, js тащит за собой какой-то адский груз легаси из плохих решений в прошлом, ещё и оборачивая его в миллион библиотек поверх других библиотек, ts пытается прибирать за js c переменным успехом, php однопоточный, ruby с python тормозные и не умеют в нормальную многопоточность, c# вызывает диабет, scala ещё более жирная чем джава и к ней есть большие вопросы по поводу принятых там подходов, и тд и тп один rust няшечка и идеален.
К го тоже есть вопросы, да.
Просто нужно держать это всё в голове, что мир не черно белый и у всего есть много неочевидных плюсов и минусов. Та же гошная "простота", которую принято хейтить, иногда реально решает и к примеру когда пытаешься продраться сквозь 100500 слоёв абстракции в джавовом монолите, который ещё и стартует несколько минут, невольно думаешь, что всё могло быть иначе. И тупой хейт языка просто показывает вас дебилами с упрощенной картиной мира в голове.
И тем более странно делать тупые вбросы про большие или маленькие переменные (это блять условность синтаксиса, как $ в пхп. Вам то какая разница чего печатать), мапы (нормально работают, запихать можно почти всё, что угодно и в реальной жизни проблем с этим вообще нет), дженерики (ну разве что дженерик методов пока не бывает и то в новых версиях их обещают. и в стд либ обещают внедрить, просто не сразу) и тд и тп.
Когда вместо нормальных аргументов вида "вот это можно было сделать лучше вот так вот" читаешь что-то настольно непродуманное, хочется закрыть тред и окончательно поставить крест на людях, раз они думать не хотят. И то часто даже по "разумным" комментариям видно, что анон просто хочет, чтобы го был "как жава" и не понимает, почему что-то сделано так, а не иначе и что здесь был трейдофф и разработчики языка пожертвовали одним в пользу другого. Кстати напоминаю, что в джаве джереники сделаны просто стиранием типов и это самое уёбищное решение на свете.
Охуенно. Ну и какая сигнатура у получившейся Мары? Какой тип? Как ее передать в функцию?
она же литералли на скриншоте инстанциирована
Я сюда пришёл из мвп-треда, потому что рейтинг вката в го самый высокий
В смысле, КРОМЕ вынесения параметра типа на самый верх? (и эти люди говорят, что async в шарпе токсичный)
Просто делай методы, где ресивер это структура, а не интерфейс. Все чотко будет.
Вообще что конкретно с мапой тебе нужно? Напиши кодом, словами нихуя не понятно чего тебе надо.
>Go is not designed to cover this kind of use case
Го это про засовывание байтов в сокет, а не вашу доменную логику
Не получится. Дженерики не решают эту проблему и не должны решать. Дженерики как раз сделаны, чтобы не допускать такого, то есть наоборот запрещают подобные действия.
Если тебе нужно одновременно держать значения разных типов, то нужно interface{} использовать или any. Но это может приводить к ошибкам типобезопасноти.
Нормальный язык, значит. С нормальными дженериками и коллекциями. Со строгой типизацией.
Вот есть regex.FindStringIndex() . Что он возвращает? Нет, не (int, int), не угадали. Нет не int[2], опять не угадали. Он возвращает - []int в котором обещают положить 2 элемента. Гении блядь, просто гении!
А ещё, по дефолту методы regex работает с байтами и надо добавлять суффикс String чтобы работать со строками.
> Он возвращает - []int в котором обещают положить 2 элемента
Эта доёбка была бы почти справедливой, если бы я не знал, что там под капотом используется общий для всех регулярок метод (re (*Regexp).doExecute , который всегда возвращает слайс (потому что он используется например в FindAll, когда вхождений может быть неопределенно много) и раскукоживать этот слайс на две отдельные переменные означало бы выделять дополнительную память. Захочешь - сам из слайса достанешь.
Но доебаться на двачах проще, чем самому заглянуть в код и разобраться, почему что-то сделано так, а не иначе, не так ли?
> А ещё, по дефолту методы regex работает с байтами и надо добавлять суффикс String чтобы работать со строками.
В целом нормальная тема, строки и слайсы байт это разные типы и всегда терпеть оверхед на конверсии не хотелось бы.
Вот я получил из мапы any. На самом деле это параметризованный интерфейс. Ну то есть внутри конкретная структура, с конкретными типами, и она знает, какие у неё типа, и её методы отвечают интерфейсу.
Прежметно.
type IEnitity[X, D] interface {
GetX() X
GetD() D
}
Есть структура, которая под ним лежит, есть конкретные X и D. Есть myMap map[string]any, куда сложены экземпляры.
Из myMap очевидно достчётся any. Как из него сделать IEntity?
Да, тут какие-то залетные школоло несут какую-то хуйню, которую без поллитры не разберешь, но я против них не воюю, воюю только в правильную сторону. Про дженерики (типопараметры в методах, которые обещали еще к 19-ой версии запиить) тебе уже пояснили, про мапы тоже.
мимо-хейтер-го
>Та же гошная "простота", которую принято хейтить
Так хейтят не "простоту", а тот факт, что пиздеж о некоей "простоте" - это именно что пиздеж.
И за то, что авторы языка полностью проигнорировали весь прогресс в комплюктер ссайенс с 70-ых годов, и вместо того чтобы просто зделоть нормально зделоли так, что теперь всем еще 30 лет за ними чистить вилкой придется.
>Из myMap очевидно достчётся any. Как из него сделать IEntity?
берешь и делаешь https://go.dev/play/p/U4qbQedqkQy
Наверное поэтому в стандартную библиотеку засунули кривой шаблонизатор, ведь go is about simplicity i zasovyvanie baytov v socket.
В случае слайсов - нет. В случае мап - есть, второй вариант сегфолтнется при использовании. Почему? Потому что go is a simple language, если уж добавляем три разных способа написать одно и то же - то надо обязательно добавить еще парочку корнер кейсов, которые крашатся в рантайме. Ну чтоб жизнь медом не казалась.
>В случае слайсов - нет. В случае мап - есть, второй вариант сегфолтнется при использовании
так если ты в nil слайс полезешь по индексу как в мапу то аналогично схватишь, тут магия только внутри аппенда
Эта абстракция была бы почти абстракцией, если бы не текла.
кстати, если уж экономишь выделение двух интов на стеке, то не забудь руками копипастить код этой функции каждый раз вместо ее вызова, ведь го - это про производительность и ПРОСТОТУ
>не забудь руками копипастить код этой функции каждый раз вместо ее вызова, ведь го - это про производительность и ПРОСТОТУ
а инлайнер в гошке чем не угодил то
Эм, нет. По какому индексу, если слайс пустой? Без разницы, инициализирован он нилом или собственно пустым слайсом, - он все равно пустой и будет out of bounds. Это не то.
В говномапах добавление нового элемента делается синтаксисом m[k] = v. В слайсах добавление нового элемента делается аппендом. В первом случае мы крашимся в рантайме от нил, во втором нет. Потому что ПРОСТОТА
Это к тому анону вопрос, не ко мне.
Нихера. У ьеня X и D - обобщённые интерфейсы. И IDE мне говорит, что я должен их вынести в сигнатуру функции, типа определить. А мне нахуй не надо их здесь определять!
>я получил из мапы any
Не нужно делать мапы map[X]any - это плохой паттерн. Нахуя ты так делаешь? Так не стоит делать.
И что за структура внутри, покажи ее в треде? Параметризованный интерфейс я увидел. А что за типы X и D, какие у них должны быть ограничения? Так нихуя и не понял что тебе нужно.
Складывать как значения в мапу структуры разного типа, но которые один и тот же интерфейс имплементят?
В общем как я понял тут что-то такое ты хотел?
https://go.dev/play/p/lWQgHbuZ825
Скинь код чо ты там хочешь наворотить, нихуя не понятно
> func accounting[X, D any]()
Вот это мне не нужно. Тем более что у меня не any, а вполне настоящие интерфейсы. То есть я был бы и не против, НО ЗДЕСЬ У МЕНЯ МЕТОД!!!
> Нахуя ты так делаешь?
Тому що в простом языке это единственный способ засунуть в мапу что-то неоднородное.
> [int, float32]
Чудесно, а тут ты из воздуха взял конкретные типы. До чего же простой язык, я ебу.
Так, с any не прокатило. Где-то на SO читал, что можно засунуть IIFE функции хитрым образом...
>засунуть в мапу что-то неоднородное
Так не нужно делать. Не стоит хранить в мапах неоднородные объекты.
Если сильно нужно, то есть интерфейсы для такого.
А не пiйшов би ти нахуй?
Да, никак. Дженерики должны однозначно раскрываться во время компиляции. КТО СКАЗАЛ МАКРОСЫ? Я ЯСНО СЛЫШАЛ, КАК КТО-ТО СКАЗАЛ МАКРОСЫ!
Надо как-то переписывать чтобы type switch использовать.
Боролся со свитчем и пришёл к тому, что единственная альтернатива свитчу это свитч. Ебануться.
Подходила к конфу первая четверть 21 века. За окном шёл дождь и рота красноармейцев.
Если честно, я так и не понял, что тебе нужно и что ты хочешь сделать. Если не влом, опиши одним постом с конкретным юзкейсом.
ГОвноланг - говно, гофанатики - пидоры, я не тролль, просто интересно
https://go.dev/play/p/hs5rGn13eFU
Я хотел в Handler получить объект из коллекции и вызвать у него методы. Объект получается в зависимости от сигнатуры. В РАНТАЙМЕ. На шарпе или яве это делается на раз-два.
Как раз то, что мы последние дни обсуждаем. Того нет, этого нет, нихуя нет, населена гоферами.
>T
>I
Говноеды.
И извини, но это просто адовый говнокод, и ты делаешь какую-то хуйню. Тебе вообще ненужны тут ни юнионы в констрейнтах, вообще ничего из того что ты наклал ненужно. Тебе достаточно полутора интерфейсов и одного тайп свича, все.
> тайп свича
У меня уже был свитч. Я хотел избавиться от него. Я, сука, неделю от него пытаюсь избавиться. Я пишу без свичей на скриптовых языках, я пишу без свичей на строгих языках, и только го заставляет меня херачить простыни свичей.
Как это говно стало популярным? Ради того, чтобы быстро класть быйтики в сокеты в 1000 потоков, люди готовы жрать говно?
Какие простыни? У тебя в пасте натурально целый экран говнокода с хуевой декомпозицией, который заменяется буквально тремя понятными строчками. Что конкретно ты хочешь сделать? Ты можешь нормально сформулировать техзадание? Или хотя бы запастить полный код?
>Эта доёбка была бы почти справедливой, если бы я не знал, что там под капотом используется общий для всех регулярок метод (re (*Regexp).doExecute , который всегда возвращает слайс (потому что он используется например в FindAll, когда вхождений может быть неопределенно много) и раскукоживать этот слайс на две отдельные переменные означало бы выделять дополнительную память. Захочешь - сам из слайса достанешь.
>Но доебаться на двачах проще, чем самому заглянуть в код и разобраться, почему что-то сделано так, а не иначе, не так ли?
Уж лучше бы молчал.
1. Уродский API остается уродским, даже если он сделан ради перформанса. Хотя конкретно тут перформансом и не пахнет, тут проблема в лени разрабов.
2. Положить 2 инта на стек, это пиздец какая дорогая операция. Ну а главное, что перед возвратом слайса там делается еще один слайсинг a[0:2] что создает на стеке те же пару интов.
3. Разрабам библиотеки насрать на перформанс, иначе бы они не использовали слайсы там где можно обойтись без них. У тебя на любой матч/файнд создается новый массив в куче, куда слайсятся результаты поиска.
4. В любом случае таким нано оптимизации, должны обязательно подкрепляться бенчмарками. Типа делаем кривой API потому что на реальных данных это дает +15% перформанса.
>В целом нормальная тема, строки и слайсы байт это разные типы и всегда терпеть оверхед на конверсии не хотелось бы.
Проблема не в наличии методов работы с байтами, а в том что метод Find() работает с байтами, а не строками что было бы логичней. Т.к. поиск по строкам выполняется чаще, чем по байтам.
>что с го что-то не так
Работа со строками, подход как в говяхе работает, если ты имплементируешь что-то низкоуровневое и нужна ебля с байтами. Для вебсервера заебись, для сервера приложения полное говно.
> Что конкретно ты хочешь сделать?
Я хочу выводить типы в рантайме. К сожалению, Go is not designed to cover this kind of use case. Дженерики работоспособны только при условии, что рано или поздно ты руками свернёшь их в конкретный тип. Нахуй они тогда вообще нужны, я не понимаю.
Ещё типы с правой стороны
>Я хочу выводить типы в рантайме
Дженерики существуют на уровне компилятора, это не сущность рантайма.
В рантайме работает рефлексия или тайп свитч.
>>47422
>рано или поздно ты руками свернёшь их в конкретный тип
Так и есть во всех языках, лол.
Дженерики по сути нужны для работы с коллекциями. Чтобы не пихать лишний раз interface{}, а взять и написать обобщенную реализацию условной сортировки или поиска в массиве. В клиентском коде дженерики скорее редкость, у нас на проекте ни в одном из сервисов они не используются кроме самописных библиотек.
В чем заключается твой кейс до сих пор не понятно. Можешь упростить и показать на более простых примерах, не захламляя код лишними переменными и структурами?
>func (File) ReadDir
>func (File) Readdir
>func (*File) Readdirnames
Просто в голос! У дебилов кончились имена, хорошо что язык кейс сенсетив.
Что тебе ответить? Что ты дебс и не видишь различия меджу присваиванием и объявлением? И еще полистываешь вместо того, чтобы почитать в документации.
В паскале приваивание
x := 1
В голанге короткое объявление локальной переменной
x := 1
x = 2
Каталог $GOPATH/bin — это место, где Go размещает двоичные файлы, компилируемые go install. Операционная система использует переменную среды $PATH для поиска двоичных приложений, которые могут выполняться без полного пути. Рекомендуется добавить этот каталог в глобальную переменную $PATH.
иначе нужно модуль инициализировать. У тебя возможно иде добавляет папку проекта в гопас
>go mod init имя_модуля
ну тогда единственное удобство это то, что с настроенным гопатхом имя модуля само из названия папочек подтянется, когда ты их в гопатхе создаш
Делай то, что тебе кажется удобнее ей богу, это программирование, тут все пишут так, как они САМИ считают удобным и правильным, нету одного единого мнения, я всегда делаю мод инит и не ебу мозги
Ты слишком много думаешь, го это язык про ГОвнокод, тут надо писать просто что бы работало
На текущий момент идиоматично размещать проект где хочешь ( обычно в /home/projects) и там инициализировать модуль через go mod init. Го модули это вообще де факто уже стандарт. Все штуки вида "размещать в $GOPATH) или не дай бог glide и dep - это всё устаревшие решения года времен года так 2017.
>>48643
Как вы, школьники, меня заебали.. Откуда вас столько именно в этом треде? Ни в одном языке нет такого, чтобы всем было насрать на всё, кроме факта работы. В разных языках отличаются критерии правильности, вот и всё. Те же джависты больше ценят уровни абстракции и максимальный импакт минимальным количеством кода, а гошники - более явный код, по которому должно быть понятно, что и где происходит.
Как же этого Джуна рвет, что его первый язык программирования оказался полной хуйней
Вот, к примеру, я могу наделать хандлеров на каждый запрос вида: /list, /edit и т.п. А как обрабатывать запросы вида: /list/1, /edit/2 ? А что если мне надо отдельные функции на GET и POST запросы? Что-то совсем не догоняю как имеющимся функционалом это можно сделать.
>Я хочу выводить типы в рантайме
Извини, но ты безграмотный долбоеб (такой же, как команда го). Иди читай, что такое "система типов", что такое "вывод типов", что такое "рантайм".
Извини, но ты обоссан и обосран. Не был бы твой менеджмент таким же безграмотным - тебя бы давно уволили.
Тот анон конечно малолетний дегенерат, но := есмь именно присваивание для х в случае типа
x, y := <...>
, если х уже объявлен ранее.
Нет, все что связано с GOPATH - устарело и может быть проигнорировано. Просто команда разработки ГОвноланга не могла с самого начала сделать нормальную систему сборки, хотя абсолютно все им говорили, что они делают говно, и что нужно сразу сделать нормально, но они решили сперва сделать все через жопу, потом выждать лет 5, пока люди опубликуют в интернетах тысячи мануалов и туториалов с объяснением кривой системы сборки, а вот потом уже все-таки все поломать и сделать так, как им все предлагали сделать изначально. Потому что таков путь ГОвна, понимать надо. Гой-вей.
О, кстати! Анон, давай обсудим НЕЙМИНГ. Пост абсолютно нерелейтед, но ты мне напомнил. Вот у меня тоже всю жизнь папка с кодом называлась projects. Но я тут подумал, что во-первых это слишком длинное слово; во-вторых, у меня есть другая директория projects в другом месте, где лежат проекты, не связанные с кодом. Короче, как правильно назвать папку с кодом?
- dev - логично, кратко, красиво, но блин /dev означает другое, опять одно слово для двух вещей
- code - но собственно код у меня лежит и в других местах, а здесь лежит именно мой код, ну точнее мои проекты, либо проекты в которых я принимаю и\или планирую принять какое-то участие
- coding - логично, но англоспецифичные суффиксы это антипаттерн!
- src - было бы неплохо, но получается дублирование из-за projectname/src, так что не вариант
- ???
- какие еще есть варианты?
пойду репостну в линукс-тред
алсо ебать тебе бомбануло от правды о говноланге, хе-хе
peace-death
Я слышал, что надо cmd называть, а внутри ещё создавать папку app.
>по которому должно быть понятно, что и где происходит
читаешь простыни невнятной хуйни с паскале-си подобном синтаксисе, особенно в голос с массивов
имагинируешь ебало тех кому более понятно.
>джависты больше ценят уровни абстракции и максимальный импакт минимальным количеством кода
>джависты
>минимальным количеством кода
идиоматичным? модули. гопатх это рудимент который ну ты можешь настроить для себя если тебе хочется но это совсем не обязательно
держу все проекты в src, включая свои/рабочи и рандомную хуйню с гитхаба не вижу ничего плохого в
~/src/github.com/golang/go/src/cmd/api/testdata/src
Ну у меня бомбит от этого ~/src/.../src. Хотя так-то наиболее логичный вариант, тут соглы.
Борщехлёбность рассуждений зашкаливает.
Знаешь, как выглядит путь к папке с проектами и серьёзных, деловых людей? Примерно так:
>D:\По работе\Новая Папка\говно\github.com\golang\
Прекрати лазить по папиному компьютеру.
Храню все documents/coding/Golang/%project name% и не ебу себе мозги настолько тупыми вопросами, храни там, где удобнее
А ещё бомбит, что структура помешается в интерфейс, и УКАХАТЕЛЬ НА СТРУКТУРУ прекрасно помещается в тот же самый интерфейс!
Я опять чего-то не понимаю? Или это хвалёная простота языка, когда я не могу понятоь, передаю я в функцию изменяемое значение или неизменяемое?
Но тогда получается нужно учить этот фреймворк как спринг на джаве или асп.нет на сишарпе. В чём преимущество голанга тогда?
Ты совсем не понимаешь что такое библиотека для роутинга имеющая буквально пару функций и ебучий фреймворк на миллиард абстракций, структур и разных функций? Там даже тысячи строк нету в ней
выебоны с велью ресиверами это просто повод выстрелить себе в ногу, когда какой-нибудь хуй через полгода добавит в структуру слайсик/мутекс и решит аппендить/залочить внутри этого метода
>Или это хвалёная простота языка
Да, это оно самое. гой-вей Есть еще корнер кейзы с имплементацией интерфейса, если ты миксуешь поинтер и валюе ресиверы, поэтому лучше всегда использовать только поинтер ресиверы. ПРОСТОТА
> for х := range someSlice {
Какого хуя х это индекс, а не значение? Кому в здравом уме нужны только индексы элементов массива? Это же совершенно неюзабельная хуйня!
По индексу можно получить и значения, а переменная массива к тому же будет лишь копией значения и следовательно изменить его не сможешь. Так что, индекс (ключ) > значения.
Просто нужно сделать это поинтером на элемент
>По индексу можно получить и значения, а переменная массива к тому же будет лишь копией значения и следовательно изменить его не сможешь. Так что, индекс (ключ) > значения
Ёбаный стыд, кто на говне пишет.
1. Какой только хуеты не придумают, лишь бы оправдать маразм архитекторов языка.
2. Не могу в простейшую логику ну или вообще язык не знают
for _, val := range someSlice {
ВНЕЗАПНО, тоже создаёт копию значения слайса.
> если ты миксуешь поинтер и валюе ресиверы
А что будет?
Я, кстати, избавился от any. Правда, пришлось всё на свете обмазать дженериками. С any у меня получалось, что я возвращал указатель, а присвивал значению. И оно волшебным образом кастовалось. Сидел целый еднь старательно убивал волшебство.
Кстати о волшебстве. Я что-то не понял, в каких случая их указателя можно вызывать методы напрямую, а в каких его надо разыменовывать.
В целом - кошмар, в том плане, что без IDE я бы не разобрался. Я с ней-то по полдня сидел глядел на ошибку.
Я сегодня изучал вопрос, как сделать N итераций. Просто N итераций. for ()..N). Официальный ответ Пайка - надо использовать трехчленный for. Вы не понимаете, это удобнее, чем for (1..N).
А в каких языках кроме питона и луа не так? Создание нового массива и forEach если что не катит
Ну да, константные ссылки были бы лучше. Но это слишком сложно для простого языка.
Зачем? Если поиграться, можешь в голанле пускать. Если что-то серьезное, то лучше возьми нормальный скриптовый язык.
>ВНЕЗАПНО, тоже создаёт копию значения слайса
Ну так тебе и написали, что поэтому изменить ты его не сможешь. А имея индекс этого элемента - сможешь.
Ей-богу, я воюю против ГОвна на одной стороне со школьниками-дебилоидами - лучше б вы молчали.
>>51573
В нормальном языке не нужно было бы городить кучу специальных случаев в компиляторе, а просто была бы функция, возвращающая итератор по множеству ключей для данной последовательности.
>А что будет?
это
>оно волшебным образом кастовалось
если у тебя поинтер ресивер, то реализация для валюе ресивера подставляется автоматически, а если у тебя валюе ресивер, но на коллсайте используется поинтерресивер, то ты словишь ошибку нот имплементед (особливо доставляет вкупе с дактайпингом), а если у тебя микс поинтер и валюе ресиверов, то еще веселее; энивей во всех стайлгайдах и емнип официальных доках рекомендуется не миксовать одно с другим и использовать поинтер ресиверыГОЙ-ВЕЙ
Вообще, забавно, насколько говнофанатики промытые зомби - буквально весь язык состоит из корнер кейсов, магических неочевидных вещей и прочей аморальной хуиты. Но чувак в пинджаке им сказал про ПРОСТОТУ - и тысячи хомячков до сих пор это повторяют. Ведь он же в ГУГЛЕ рабоатет, понимать надо, вумный значит дофига.
>в каких случая их указателя можно вызывать методы напрямую, а в каких его надо разыменовывать.
Один уровень индирекшона разыменовывается автоматически
Тупая косметическая доебка, уровня "а вот в лишпе надо писать (f x y) вместо f(x, y), кокой кошмар!!11".
Хотя в целом это конечно сигнализирует о том, что в языке нет поддержки стримов (потому что нет нормальной системы типов)
>в целом это конечно сигнализирует о том
Что некоторые языки заботятся об удобстве программиста, а некоторые объясняют, для чего именно язык предназначен.
>В нормальном языке не нужно было бы городить кучу специальных случаев в компиляторе, а просто была бы функция, возвращающая итератор по множеству ключей для данной последовательности.
Кстати, почему не сделали итераторы как в пистоне? Реализуешь определенный интерфейс и итерируешься сколько хочешь без ебли с каналами
>Что некоторые языки заботятся об удобстве программиста
Удобство программиста - в хороших базовых абстракциях, на которых построен язык. А не в том, есть там какой-то минорный синтаксический сахар или нет (один хуй что то, что другое генерится автодополнением из шаблона по нажатию двух клавиш).
>>52335
Потому что... задние ряды уже начали догадываться... потому что... %%ГОЙ-ВЕЙ!!!11 ПРЫСТОТА, ПЫНИМАИШ?!!111 ГОЙВЕЙПРОСТАТАяидиотубейтеменяктонибудь
>без создания нового массива
>функция создающая новый массив
Ебало памяти и гц Имагинировали если мне нужно слишком дохуя сделать итераций?
Дохуя итераций обычно на пустом месте не появляются. У тебя скорее всего есть уже какая-то коллекция, по которой ты итерируешь. Я про другое. Тете для простого учебного примера надо сделать 10 итераций. Или тебе надо скинуть первые десять строк файла. Или что-то такое.
>>52364
Не знаю, чего все так не любят сахар. Вот в сях квадратные скобки это сахар? Сахар. Неужели удобнее писать (pointer+5sizeof(int)) ?
Да шож ты сука звёздочки жрешь, падла...
Не уверен на 100% насчет шарпа на 95% впрочем уверен, но нормальные стрим апи (или трансдьюсеры например) не создают новый массив при range(1,10), а просто возвращают стейтфул итератор, который с константной памятью йилдит значения в указанном промежутке. Учите матчасть, товарищи!
Я не про любовь\нелюбовь, а про то, что доебка анона АРРЯЯЯ НАДО ПИСАТЬ i:=0; i<n; i++ вместо i:=(0..n) - абсолютно тупая и демонстрирует скорее его скудоумие, чем скудоумие создателей ГОвняшки (особенно на фоне того факта, что есть примерно 9000 других аспектов, действительно демонстрирующих скудоумие создателей ГОвняшки, и притом гораздо более фактурно и красочно).
Концептуально правильное решение - open + first-class records, в примитивных низкоуровневых языках типа го и хаскеля такое невозможно.
Концептуально неправильное, но терпимое решение - id : Maybe int. Применяется по дефолту в большинстве языков со статической проверкой типов.
Концептуально неправильное, нетипизированное и prone to bugs решение - добавить в документацию констрейнт, что айди из базы никогда не должен равняться нулю, добавить в докстринг замечание, что айди = 0 подразумевает, что данная энтитя не записывалась в базу. Применяется в говняшке, потому что и так сойдет.
А, ну так хули ты тут склоняещь Голанг? Дядя Роб сказал, как правильно писать, вот и пиши. Длинно - похуй, так надо. Неудобно - похуй, зато просто. Дядя сказал просто, значит просто.
>А, ну так хули ты тут склоняещь Голанг?
Потому что это плохой язык? У тебя какой-то глупый и никчемный постинг, сорян.
Привет аноны, заинтересован в разработке какого-нибудь опенсорса или ваше интересного проекта, вдруг вы разрабатываете что-то реально интересное, может быть бесплатно, в зависимости от проекта готов уделять 10 + -ч в неделю
это еще много, поверьте, если работаешь
>Ей-богу, я воюю против ГОвна на одной стороне со школьниками-дебилоидами - лучше б вы молчали.
Ты просто тупой мудак, который не умеет четко выражать свои мысли.
samber/do мне сообщает: DI: could not find service `service.IService`, available services: `chi.Mux`, `render.Template`, `service.IService`
Чтозанахуй?
Сука. <ASTERISK>service.IService в обоих случаях.
Пошел нахуй пидорас, нахуя ты этот ебанутый диай в гошке поставил, ну и конченные Джуны пошли, им похуй на все, главное название красивое
Мне нсчальник передал скелет кода. Я бы не ставил, я в нём смысла не вижу. Но я вижу магию, которую я не понимаю. Какая-то еботень со структурами, интрефейсами и указателями. В простом языке.
>Я не тот анон, которому ты отвечал. Ей-богу, какой же ты тупой.
Мудило! Это анонимная борда, я отвечал на сообщение, в душе не ебу сколько там семенов.
Ага. Получается, что надо регистрировать структуры. Указатели на структуры. Интерфейсы рагистрировать и получать не надо. Интерфейсом можно объявлять переменную, магию им делать на надо.
А от этого DI я собираюсь избавиться, но позже. Не вижу смысла в DI, когда у тебя нет полиморфизма в самом дизайне приложения, когда у тебя уникальная структура, в единственном экхемпляре. Думаю всё убрать в "статический клас" - спекаильно обученный package.
>Думаю всё убрать в "статический клас" - спекаильно обученный package.
Все зависимости на данном слое у тебя должны быть убраны в структуру, которая передается аргументом (или ресивером) к хендлерам.
ты уже вторую неделю пытаешься разобраться в базовых вещах, как я понимаю ты стажер, как тебя до сих пор не уволили? что за фирма, если не секрет, нонейм ипшник?
Я на перле 20+ лет писал. И последние 10 лет поддерживал жуткое легаси. Пришёл сюда на поддержку, как выяснилось, ещё более страшного легаси (до 40к строк в одном файле, все в одной процедуре, вложенности if-ов достигает восьми), но в процессе решили всё переписать на го, заодно научить ему меня. Типа, бросили в воду, плыви.
> разобраться в базовых вещах
В базовых вещах простого языка, который состоит из подводных камней. А заодно переписать нормально код человека, который поместил в пакет repository интерфейс Service и структуру Repository, а в пакет service - интерфейс Repository и структуру Service.
>А от этого DI я собираюсь избавиться, но позже. Не вижу смысла в DI, когда у тебя нет полиморфизма в самом дизайне приложения
реальный di как паттерн или ты про di фреймворк еботу которая сама подставляет зависимости? сам di нужен, чтобы можно было замокать зависимости и написать юнит тесты без боли, которые не ломаются от минорных правок в соседнем пакете.
Получается даже в таких авторитетных книгах пишут лютый говнокод?
Для исправления ошибки изменил их структуру на слайс, где хранятся ссылка на обработчик и откомпилированная регулярка. Само собой обработчики надо добавлять в слайс в порядке от частного к общему, т.е. "GET /hello" должен добавляться раньше, а "GET /" должен идти последним.
В принципе, таким образом можно получить неплохой маршрутизатор для своих проектов.
Я слышал, что гарилу уже не используют, а горм - не идиоматичный, потому что в голанге пишут SQL-запросы, и не используют ORM.
Базовая библиотека не позволяет писать полноценные веб-приложения, потому надо наворачивать ещё целый слой логики.
Среди фреймворков целый зоопарк и не понятно какой учить, а какой не учить.
Написать что-то своё тоже сложно, потому что нет опыта.
>В базовых вещах простого языка
Нет, в этом посте я подразумевал базовые вещи софтваре инжиниринга в целом, а не говняшки в частности, - ну архитектуру и т.п.
>поместил в пакет repository интерфейс Service и структуру Repository, а в пакет service - интерфейс Repository и структуру Service.
А что не так? Видишь, ты опять упираешься в непонимание принципов архитектуры, инверсии зависимстей и т.п.
>Получается даже в таких авторитетных книгах пишут лютый говнокод?
Да, разумеется (и это не авторитетная книга). Тем более средний уровень ГОвноразработчиков довольно низкий, поэтому и большинство публикующихся книг по говняшке - довольно низкого качества. Их же пишут не какие-то марсиане с нибиру, а такие же кодеры.
Алсо, возможно описанное поведение соответствует ТЗ, и это не баг, а фича!
>>54001
>Само собой обработчики надо добавлять в слайс в порядке от частного к общему
Нет, нужно применять сортировку по длине префикса. Раз уж фиксишь - то фикси, а не меняй один говнокод на другой.
>В принципе, таким образом можно получить неплохой маршрутизатор для своих проектов.
троллейбус-из-буханки.пнг
>сортировку по длине префикса
Как ты мапу отсортируешь? Тем более перебор идёт в порядке внутреннего представления (по вёдрам в карте). А если при каждом запросе гонять сортировку, то это ещё хуже, чем линейный поиск по слайсу в моём случае.
>троллейбус-из-буханки.пнг
Это же главная идиома голанга)))
Возможно более понятный тебе вариант
1) https://github.com/mammenj/goboot
В целом норм + -
2) https://github.com/shehab-as/Go-Microservices
Я хз, мб меня засрут, но я считаю правильным делать круд микросервисы, а дополнительную бизнес логику помимо этой выносить в отдельный микросервис, этакий
юзер-товары-корзина(3 круда)
бизнес процесс добавить в корзину уже отдельный микросервис. Охуенно же по факту, имеешь структуру дерева микросервисов и быстро фиксишь\добавляешь в нужное.
>Как ты мапу отсортируешь?
Я не про мапу... хотя вообще говоря есть сортед мапы
>А если при каждом запросе гонять сортировку
Ох... Не при запросе. При объявлении роута.
>Это же главная идиома голанга)))
Бля. Туше!
Так а почему нет? Роутер физически не могут устареть
Да, хоть что используй, что сердцу твоему ближе.
>Написать что-то своё тоже сложно, потому что нет опыта.
>Я вот сейчас думаю, что подход Адама Фримана, который написал свой мини ASP.NET на голанге, не так уж и плох.
>Базовая библиотека не позволяет писать полноценные веб-приложения
Вру, последняя строчка такая - any any pointer nil
Зачем тееб го, анлг* Иге вль за него платят деньги, и я страдаю. Я бы поедпочёл, чтобы мне платили за шарп, но мне платят за го, и я разыменовываю nil. А тебе зачем? Возьми нормальный типизрованный язык. Или возбит нормальный гибкий удобный язык.
У голанга самый высокий рейтинг вката, а на сишарпе он один из самых низких, дак ещё надо и фронт учить, потому что 75% вакансий - это фуллстек.
>все мысли выражены предельно четко
Какие блядь мысли? Там полный пук-среньк, а не мысли. Ты тут уже несколько постов усираешься мне что-то доказать, но при этом не привел пример когда нужно итерироваться по индексам, а не значениям. Единственное, что я могу назвать это инициализация пустого массива. Все остальное или значение или индекс+значение удобнее.
>бизнес процесс добавить в корзину уже отдельный микросервис.
И запускать на AWS Lambda пусть кабан удивится счетам за хостинг.
>Ты тут уже несколько постов
Ты меня перепутал с другим аноном (кажется, тебе об этом уже говорили).
>пример когда нужно итерироваться по индексам, а не значениям
Любой код, изменяющий элементы массива, КО на связи.
`
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, только потому что мне нужен поинтер-ресивер...
`
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, только потому что мне нужен поинтер-ресивер...
type A struct {}
type B struct {}
type AB interface {
A|B
mutator()
}
func (x #AB) mutator() {
}
func ABCreator[T AB] () T {
return &T{}
}
type ABP[T AB] interface {
#T
}
`
func ABUglyCreator[T AB, P ABP[AB]] () P {
return &T{}
}
Йобаная макаба.
Если я напишу
type AB interface {
A|B
}
то я хз как писать конструктор, мне скажут поинтер не тип.
type A struct {}
type B struct {}
type AB interface {
A|B
mutator()
}
func (x #AB) mutator() {
}
func ABCreator[T AB] () T {
return &T{}
}
type ABP[T AB] interface {
#T
}
`
func ABUglyCreator[T AB, P ABP[AB]] () P {
return &T{}
}
Йобаная макаба.
Если я напишу
type AB interface {
A|B
}
то я хз как писать конструктор, мне скажут поинтер не тип.
main.html у тебя по моему висит на /static, а ты еще сверху хуйни дописал в url, поэтому он берет дефолтный.
Даже по запросу http://localhost:5000/static выдается Root.
Тем более весь смысл именно в том, чтобы он обрабатывал все файлы в папке static. Там всякие js, css файлы, картинки и т.п.
Разобрался! Запрос возвращается с префиксом /static, поэтому надо его откусить, чтобы он правильно подставился к папке.
Делай два - https://go.dev/play/p/mkLZ1pCwBu_X
Как только мы добавляем ещё один слой .. с дженериками? ломается pointer receiver.
>Ты меня перепутал с другим аноном (кажется, тебе об этом уже говорили).
Повторяю для тупых:
>Мудило! Это анонимная борда, я отвечал на сообщение, в душе не ебу сколько там семенов.
>>55655
>Любой код, изменяющий элементы массива, КО на связи.
То что ты читаешь жопой я уже понял
>или индекс+значение удобнее
Ты отвечаешь не на то сообщение.
Зачем индекс+значение, если мне нужен только индекс?
хватит засирать тред
>>55663
>>55671
Ты заебал, пости код в пастебин. https://paste.opensuse.org/pastes/new
>>56122
Ты заебал со своими ебучими шарадами! У тебя ж во втором случае метод вообще не определен, в отличие от.
>Зачем индекс+значение, если мне нужен только индекс?
Ты туповат, но для Говно разработчика это норма.
Итак, для аутистов еще раз. Ты Disclaimer: или кто-то другой кто спизданул в этом треде. Я семенов сортировать не собираюсь спизданул:
>Любой код, изменяющий элементы массива
Чтобы что-то менять надо иметь старое значение эта мысль может быть не очевидна для даунов, но это правда. И тогда
>индекс+значение удобнее
не надо будет slice делать, можно сразу slice = transform(superStruct).
Ждем вскукареков про то что slice читабельней чем superStruct потому что ко-пок.
>Чтобы что-то менять надо иметь старое значение
вообще-то иметь возможность обратиться к старому значению которое лежит по правильному адресу, ведь копию также можно назвать "старым значением" во многих контекстах
>Чтобы что-то менять надо иметь старое значение
Необязательно. Вангую, что ты быдло-оопблядок, не слышал про функциональное программирование (в 2024-то году, хехмда), и для тебя изменять (ака mutate) - это то же самое, что обновлять (ака функция из старого значения в новое).
>slice = transform(superStruct)
Я ошибся в предыдущем спойлере, нейминг выдает в тебе студентоту-вкатыша.
>читабельней чем
Разумеется в большинстве случаев доступ по индексу будет читабельней, чем смесь из доступа по индеку в lhs и нового биндинга.
Про то, что в отдельных случаях копия значения != само значение тебе уже пояснили.
1. Как писать миграции на буне, если я не хочу отлелоьно выписывать sql? Чтобы он по структуре сгенерил мне таблицу. Официальная документация какая-то туманная.
2. Как правильно писать тесты на го? Что почитать на эту тему?
Базы? Ну рассказывают как подключиться, там выполнить запрос. А миграции? Транзакции? Ноль инфы.
В общем, выйти на уровень профессионального разработчика невозможно из-за отсутствия инфы.
Везде. В го нет ссылок. Это слишком сложно для простого языка. И если ты хочешь менять значение - надо передавать указатель. А если ты хочешь менять значение вызывателя - тебя ждут незабываемые чамы и дни. Даже моя привыкшая к void* жопа отказывалась принимать с первого раза. Неявное кастование приятно щекочет простату.
>ссылки
>нельзя менять значение
Хуя се, и правда. Почему соевики не уделили внимания в Go Tour этим простым, но в то же время важным вещам?
Потому что это понимает каждый, каждый это понимает с детства. Но ему ныжно объяснить Иначе он не поймёт ничерта.
>1. Как писать миграции на буне, если я не хочу отлелоьно выписывать sql? Чтобы он по структуре сгенерил мне таблицу. Официальная документация какая-то туманная.
>Все учебные курсы рассказывают как написать примитивный http-сервер через один HandleFunc и ListenAndServe. Но реальные приложения так не пишутся
в больших компаниях у тебя будет шаблон main.go, где нужно тупа зарегать хендлеры/прокинуть репозитории/сервисы, даже ListenAndServe за тебя уже есть в копипасте.
После скриптовых языков не очевидная хрень. Если нулевой или С господин, то вопросов нет.
Я ещё слышал, что надо писать промежуточное ПО, уметь делать валидацию форм, логирование, авторизацию и всё это уметь тестировать. Но инфы по этим темам нет. Есть курсы для новичков, где в лучшем случае делают примитивные примеры, а как это реализуют в реальных приложения - не пишут.
>миграции, транзакции
Помешанный шизоид на ОРМ, ты? Откуда только таких джунов понабрали, которые без орм ебучую миграции не осиливают блять…
Инфы по этим темам дохуя и больше, называется QA, сейчас половина вкатунов туда лезет.
>валидация форм
Ты на ГОвняшке фронт умудряешься писать?
Нахуя нам ради тебя открывать гугл и искать что то? Потом еще и слушать твое нытье если статья окажется хуйней.
Открыл гугл и завалил пиздак, ВСЕ, никто не носит с собой коллекцию не нужных им статей, не все настолько тупые как ты
А нахуя ты вставляешь своё тупое мнение тогда? И в отличии от тебя, тупого пиздабола, я уже гуглил эти темы. И на основе это опыта утверждаю, что учебных материалов в свободном доступе нет. Но тут высирается очередной тупоголовый уёбок, который не погуглив, не проверив этот вопрос, высирает своё тупое мнение, что материалов там якобы дохуя. А когда его просят скинуть хотя бы пару ссылок, то сразу сливается со словами, что ему нахуй не надо что-то искать за других. Дак нахуя ты лезешь со своим мнением? За слова отвечать не учили?
Неосилятора миграций без ормки порвало, классика
большая часть этого к го как таковому не относится и везде немножко по-разному будет сделана с разными либами. на каждой работке придется привыкать к чему-то новому, главное понимать принципы, а они вообще языконезависимы.
если ты вкатывальщик, то тебе как стажеру принципы объяснят и у тебя будет там ~3 месяца, чтобы это вдуплить на реальных примерах сервисов твоей команды нужно только понимать как делать по подобию.
Съеби в прикреп. Тут не рады очередным вкатунам, тут тред про унижение авторов го.
Да тут никому не рады. Это же двач.
в этом квартале тупо одну единственную табличку БД из сервиса вынесли в отдельный сервис. овер 1500 сервисов в компании
от компании к компании зависит, вряд ли можно дать общий ответ.
я думаю у нас тебе нужно будет сообщить HR о том, что ты гомосексуал у тебя опыт только с ЖС, но ты хочешь пойти в роли полноценного заднеприводного. тебе скорее всего подыскали бы инженера, который может на ЖС провести секцию по бэку. но тут уже зависит от готовности/желания самих интервьюеров, а гошников у нас больше, чем перекатчиков с ноды
Нужна книга, где рассказывают про всякие миддлвари, авторизацию, миграции.
Почему такая разница в сортировке интов и интерфейсов?
В книге собрана вся нужная инфа и проверена рецензентами. А статейки пишут кто не попадя и их никто не проверяет. Тем более в сотне статеек сложно ориентироваться, если не знаешь какие темы тебе вообще нужны.
Вот выше я озвучивал некоторые из них, а сегодня узнал ещё про контекст. А если бы мне не повезло и я бы про него не узнал? Так что лучше прочитать добротную книгу и получить весь объём знаний, чем прыгать по статейкам с пустой головой.
То есть ты готур месяц проходил? Хехмда
>В книге собрана вся нужная инфа и проверена рецензентами. А статейки пишут кто не попадя и их никто не проверяет
там выше была книжка, которая написана прожжённым шарпистом, которую ревьюил другой прожжённый сертифицированный майкрософтом шарпист. ты больше получишь от того, что 5 статей от индусов с плюрализмом мнений прочитаешь и составишь своё, чем такую графоманию от залетного хуя, который рассасывает её на 30 страниц.
Ты из тех самых верунов, думающих что книги пишут умные люди? Эти книги пишут нищуки, которым в айтишке не платят, поэтому приходится идти как книгописец, тогда их и начнут брать, ведь ЦЕЛОЯ КНИГА
Я просто пишу свои проекты и все, хватить пытаться делать все, лишь бы не само программирование, его так и надо учить, брать и тупо кодить, что то не понимаешь или нужно - открываешь гугл и гуглишь что тебе конкретно надо найти, го тур только пройти не забудь
Я пытался гуглить маршрутизаторы, но там в каждой статье по разному пишут. В итоге так и не понял что и как писать. Ещё бывает с ошибками пишут, которые не сразу замечаешь.
Непосредственно про маршрутизаторы в старых статьях пишут, что надо использовать гарилу, а сейчас встретил инфу, что гарилу нельзя использовать, потому что она всё. И кому верить?
Эм. Пчел, есть энтерпрайз-программирование. И есть язык го, для которого даже готур проходить неоябательно. Го в определённом смысле реально простой - в нём куда ни ткнёшься, ничего нет, учить буквально нечего. Зажача стоит как выразить лучшие практики программирования на этом зяыке, в котором ничего нет. Но это приходит только с практикой.
>энтерпрайз-программирование
Какую книгу почитать, чтобы изучить это энтерпрайз-программирование?
Тогда с чего ты взял, что в книге будет единственно правильное мнение? Особенно с учетом, что книга в 99% случаев - устаревшая. Роутер устареть никак не может если что, его просто перестали поддерживать и выпускать фиксы
Книгу я хочу, потому что там описаны другие темы: миграции, авторизации, контексты и т.п. Откуда я вообще это должен всё узнать? Это как дать человеку, который не умеет читать, учебник русского языка и удивляться, почему он до сих пор не начал читать/писать по-русски.
ну я пришел на работу стажером после прохождения го тура и делал по подобию как в команде принято. лазил по внутреннему гитлабу и искал что круто выглядит. лазил по гуглу читал говностатейки
Если настолько простой то почему пишут что не подходит для первого языка и для изучения программированию?
Тебе повезло. Считай всему научили на работе. А я вот дома самостоятельно всё учу, а это в разы тяжелее.
Не знаю. На мой взгляд, он вообще ни для чего не подходит.
Используя библиотеки и нарисовал свои петы ты в любом случае так или иначе столкнешься с этим, а дальше уже конкретный вопрос забиваешь в гугл, почему до тебя этот не доходит то
ну слушай метрики логирование это совершенно минорные штуки, которые даже в топовых компаниях часто делают на отъебись и всё меняется от команды к команде. у нас на собесах например вообще нет вопросов по этому, максимум на финальном собесе тебя спросят с какими технологиями ты работал и ты можешь там прометеус/эластик упомянуть. но всем будет понятно, что если челик учил эту хуйню самостоятельно без команды, то грош этому цена. аутентификация это еще та залупа, с которой вероятно даже не придется столкнуться, будешь сразу userID в хедере получать.
а ну и бля. в той залупе даже код ревью не проводили, я тупо мержил свой говнокод себе в мастер. так что повезло не повезло.
ну и вообще я к тому, что тебе эта хуйня не должна помешать пройти собес и уже учиться у команды.
>аутентификация это еще та залупа, с которой вероятно даже не придется столкнуться, будешь сразу userID в хедере получать
ну и если это не так, то с JWT разобраться и написать себе мидлварю можно буквально за день
Учить не долго, но потребуется время на охлаждение жопы в процессе.
Вангую, что пулреквет не примут. Даже если ты закоммитишь реализацию нормальных дженериков в сам го - тем более не примут.
меня взяли но тогда время было другое...
чтото из этого:
ты не спросил
ты психический инвалид
ты некорректно ставишь вопрос
ты не там спросил
Я изучил го кор, но не понимаю как писать реальные веб-приложения, потому что не могу найти инфу.
Сейчас скачал какой-то видеокурс и там тоже самое. Рассказывают про стандартную библиотеку net/http, а примеров написания реального приложения не дают.
Хм. Где бы об этом почитать. Именно о философии, приемрно как написано 100500 книг и статей о философии ООП.
Потому что в голове как-то не совсем укладывается. То есть оно работает, да, хотя ко(нтр)вариантности не хватает, но в жабе или шарпе я уверен, что если я хлрошо прописал типы, то у меня всё правильно работает. А с этими интерфейсами, которыми может прикрыться кто угожно в любой момент...
Я вот про то же. Книг по голангу вообще нет. А те, которые есть, описывают только основы. А как это всё применять на практике - не понятно.
Тебе десять раз сказали - читай любую книгу по паттернам, по энтерпрайз-приложениям. Просто пиши не на жабе, а на го. Зачем тебе вообще го, если ты не можешь даже этого понять?
На го самый высокий индекс вката, поэтому решил изучать го, чтобы наверняка вкатиться
https://suraj-batuwana.medium.com/complete-golang-microservice-example-5857d65eb80f
погугли разные варианты ("golang example"), желательно самому писать первое время без всяких gin/chi
чтоб на собесах залетных отфильтровывать
Если у тебя го вообще первый язык то тогда сложновато, лучше питон/ноду годик а потом го. Если у тебя есть опыт программирования на других язык, и ты в целом идешь не с одной прочитанной книгой на собес, то шансы есть. У меня месяц ушло на получение оффера. Портфолио не забудь, хотя бы какие-нибудь круды туда покидай типа простых апишек. Иначе hr твое резюме даже смотреть не будет.
Я учил сишарп и джаву до этого, но в сишарпе нет кроссплатформенности и обратной совместимости, много сахара, а в джаве кривые инструменты и надо покупать платную идею, чтобы писать веб-приложения.
В таком случае не парься, шансы есть. Тебя больше по докеру, базам, микросервисам гонять будут чем по языку. Хотя конечно зависит от собеса. Могут что-то типа этого >>64661 или классика о том почему переменная цикла в замыкании выводит 10 раз 10, а не 1, 2, 3 и т.д
Пройдись по основным моментам, как шедулер работает, сборщик мусора, оч. рекомендую прочитать Concurrency in Go: Tools and Techniques for Developers. А так могу пожелать только удачи и не слушать тех кто отговаривает.
Хорошему программисту сахар мешает. И платная идея. Чувак, учи лучше 1С, или там PHP5. Будешь вордпрессы хуярить пачками. Вордпресс грязный, вонючий, за него платят мало, но его можно хуярить пачками.
А здесь... да, работа с сетью как элемент языка это забавно. НО БЛЯДЬ ЕХАЛ ANY ЧЕРЕЗ ANY.
Что можно запистаь в базу? Правильно, any. Что можно передать по сети? Ну-ка, дети, мы про него стишки учили и рассказы читали? Правильно, any! На выходе тот же PHP5 получается, только с горутинами.
Я в универе писал lab.cpp и мне очень нравилось гонять байтики. Поэтому подход го мне ближе, чем заоблачные абстракции джавы и сишарпа.
>>64875
Сейчас во всех дистрибутивах линупса удалили дотнет6 и оставили только 7. В итоге фиг запустишь программы для дотнета6 или более поздней версии.
Ещё вижла только под винду. Ещё асп.нет надо переучивать каждый год.
Просто для сравнения. Я могу поставить голанг на старенький ноут и программировать на нём в любом текстовом редакторе. А для джавы надо ставить монструозную идею, которая жрёт по 4 гига в простое и тормозит безбожно. А сишарп надо ковырятся с подгонкой нужного дотнета, да и среды для линуксов толком нет. А среда нужна, потому что сама структура проектов требует объединения их в солюшены. А солюшены поддерживаются только вижлой в винде. Сами микрософты официальным решением проблемы предлагают ставить виртуалку с шин11 и даже сделали готовые образы.
>>64940
На Си работы нет толком.
> во всех дистрибутивах удаллили dotnet LTS
> на го можно писать в блокноте, а на жабе только в платой идее
> го скомпилируется и запуститится на первопне
> асп надо полнолстью переучивать каждый день, ПОЛОНСТЬЮ, КАРЛ!
> я вот писал в универе лабу на десять строчек, и хочу такую же работу, чтобы два байта переслать надо было, я слышал что байты шлют на голанге и платят за это 500к/нс
> ни в одной книге по голангу не написано, какой роутер использовать и зачем он нужен
> ваши советы говно, я буду продолжать есть суп ножом и ныть
Уходи. Скатил тред в несмешной цирк.
Я всё равно не буду возвращаться в твой джавошарп
Тащемта правильно отговаривают. Сейчас даже на пхп вакансии по 100 откликов. А на гошечке (на которую мечтают сьебать пхпшники) это вообще анрил. Мало вакансий с кучей откликов от опытных пхпистов. Это ещё при том что у самих пхпистов сотни желающих вкатунов. А это самый простой язык для вката
Опытные пхписты привыкли писать в рамках фреймворка типа ларавеля или симфони, а тут надо самому писать фреймворк. Из-за этого вкатиться в голанг сложнее.
Я на голанге вообще без фреймворка пишу. Язык достаточно прост и удобен для этого. Всем похуй. Вот и сижу в своем пхп болоте.
>но в жабе или шарпе я уверен, что если я хлрошо прописал типы, то у меня всё правильно работает
Рубрика "программисты шутят".
Это копия, сохраненная 7 июня 2023 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.