Откройте для себя Temporal и закройте свои велосипеды.
@brunqlАй бұрын
Лайк подписка
@alexpopov7600Ай бұрын
наконец-то в go придумали манки патчинг
@IvanIvanov-re8bkАй бұрын
Попробовал все инструменты для чтения QR в конце - ни один не считывает. Для таких вещей, наверное, стоит оставлять нормальные ссылки?
@middaysanАй бұрын
очень круто, спасибо! мало кто понимает и освещает как работает код на низком уровне теперь, и как с ним можно работать, очень круто посмотреть видео с хорошо структурированным объяснением, конечно использовать это все в проде я бы не стал и бил бы по рукам в issue тем кто пишет библиотеки вынуждая кого-то использовать подмену, но давайте еще такой контент! =)
@ayaz.ayupovАй бұрын
спасибо)🙂
@derwin22-w7lАй бұрын
Спасибо за видео! специально не искал, но проблема с телеметрией глобально через драйвер ОЧЕНЬ давно меня интересовала.
@fenderbender2096Ай бұрын
Без таймкодов не то.
@GoFuncConfАй бұрын
Здравствуйте! Передали пожелание по тайм-кодам коллегам 🙂
@лешавасильев-щ4дАй бұрын
А слышали про Skypro и что думаете об обучении там? мне друзья посоветовали попробовать Skypro, говорят, там все хорошо объясняют
@whazapbazАй бұрын
прикольная экономия на рекламу у вас не хотели ли граффити по городу красить ваших курсов прям на асфальт в переходах? я бы прошелся по ней
@volumesurup2078Ай бұрын
С Time.After в новых версиях гошки уже не леквид
@developerdiary3136Ай бұрын
Странно, что люди не хотят добавить Трейсер в библиотеку, хотя драйвер хороший, использую
@kriskaruzo1398Ай бұрын
lockSlow schema по ссылке из гитхаба - пишет что Ничего не найдено
@андрейиванов-ж7чАй бұрын
А слышали про Skypro и что думаете об обучении там? мне друзья посоветовали попробовать Skypro, говорят, там все хорошо объясняют
@Кир-я9о2 ай бұрын
Доклад интересный, но спорный. Где гарантия что Ваня так быстро напилит 30 фич, если делает тяп ляп лишь бы работало? Там такая может быть связанность кода, что на 10 фиче Ваня завалит весь проект, сам запутавшись в своих дебрях. И почему считается что Петя такой тормоз, правильно спроектировав систему, не сможет относительно быстро внедрять новые фичи? Преждевременная оптимизация зло, но и тяп ляп лишь бы работало тоже... Получается Вася выиграл только за счет Gorm?)) Сомнительный рецепт успеха. Любой инструмент надо знать и уметь применять когда нужно. Нормально делай - нормально будет (с) PS. В pgx v5 можно сразу сканить в структуру - не переписывая сканы по полям. Аргумент про ручные сканы без gorm давно не актуален.
@dmitrym28412 ай бұрын
Забыли про сжатие различными алгоритмами при записи в кафку. Стоит начать с тестов сжятия на кафке, перед переходом на proto.
@theruziev2 ай бұрын
Искандер ♥
@blacksun95182 ай бұрын
А ты довольно симпатичный
@Torbjorn-ph7rt2 ай бұрын
36:00 про коммиты с генерированным кодом. При всём уважении позвольте не согласиться с тем что надо коммитить, а не генерировать с CI/CD. Проблема возникает когда с модулем работает несколько разрабов. Если гит начинает один из файлов воспринимать как бинарный (например из-за больших размеров или есть правило для гита) или генерируемый код существенно различается с каждой генерацией то на этом файле будет постоянный конфликт со вторым разоаботчиком. Этот эффект постоянно наблюдается в фронтенд разработке - там скомпилированные пакеты имеют размер мегабайты и если фронтендеров больше одного конфликты возникают всё время и разруливаются они только в пользу одного из разработчиков потому что файл меняется целиком. При генерации "на месте" конфликты возникают только в реально конфликтной ситуации - когда два разработчика работают над одним и тем же куском кода.
@superkozel12 ай бұрын
проблема начинается, если мы создаем dto(request/response/form/viewobject) для entity. Если для entity у нас создается дополнительные классы(домменные объекты в данном случае), то их нужно продублировать, вместе с их полями в дто. И это лютое количество кода. У нас около 50 моделей в одном апи, и 50-100 в другом, и такой подход очень сильно усложнил бы жизнь при нашем коллективе в 7 разрабов. Я пока делаю вывод, что DDD в той же топке, что и микросервисы - подходов для компаний со сверхдоходами и раздутым штатом, где на каждый микросервис по несколько разрабов, и есть время веселиться с кодом.
@Iaxls2 ай бұрын
Хороший доклад
@alexpopov76002 ай бұрын
23:30 правда чтоли не надо проверять? p.setName("88005553535", "yo man!") компилятор не пикнет даже. потому что в го нет никакой поддержки opaque типов, все алиасы прозрачные, значит valuetypes придется заворачивать в номинальные типы
@f0rzend592 ай бұрын
Неплохой доклад. Чувствуется, будто докладчик волнуется и, как будто читает текст. Но содержимое очень хорошее
@LoVe_HaWkEEl2 ай бұрын
Очень информативно, молодцы!
@super-ebaka3 ай бұрын
GO - кал между ассемблером и факторио
@Elijah-xe2he3 ай бұрын
Если я правильно понял, в представленной структуре слой application зависит от infrastructure. В луковой и подобным архитектурам как раз наоборот infrastructure должна зависеть от application. Полагаю, автор доклада изменил направление зависимости, чтобы было проще дергать инфру из application не плодя лишние интерфейсы? Тогда это неправильно называть луковой архитектурой.
@mtk61883 ай бұрын
Нет, инфраструктура на то и инфраструктура, чтобы стоять особняком: в ней находятся детали реализации типа "как отправить емейл", или "как ходить в базу" и т.п. В аппликейшен лейере вы описываете конкретные бизнес юзкейсы, например, достать из репозитория объект, запустить на нем доменную логику, отправить емейл после и т.д.
@Elijah-xe2he3 ай бұрын
@@mtk6188 я понимаю, что размещается в инфре, что в app слое, что в доменке. Нарушать зависимости слоев неправильно, если хотите луковую/чистую/хексагональную архитектуру. Никто не запрещает из app слоя обращаться к репозиторию, на то и придуманы интерфейсы и IoC.
@alexandrfolomkin93803 ай бұрын
Выносить интерфейсы в go в отдельный пакет - такое себе решение, сразу оказывается что интерфейс становится публичным, а значит может где-то использоватся - а это уже протекание абстракций. Интерфейсы должны объявляться в том же месте где и используются Использовать функцию init - это антипаттерн - неявное выполнение кода, тем более с if. Для настройки лучше использовать репозиторий с несколькими реализациями. application и service - граница какая-то вялая между ними Короче, питонист пришел в гошку и наводит шорох
@asdfsavs68463 ай бұрын
Вопрос по поводу интерфейсов. Допустим есть интерфейс репозитория. Репозиторий нужно использовать в нескольких местах (сервисах). Что вы предлагаете? Копи-пастить интерфейс в два места?
@maoshultz17313 ай бұрын
Там где вы его реализуете
@Elijah-xe2he3 ай бұрын
Интерфейсы на то и нужны, чтобы быть публичными ) Чтобы внешний код был зависим от контракта, а не от реализации. Если интерфейс приватный и лежит рядом с реализацией, в чем тогда его смысл? Сам по себе публичный интерфейс не создаёт проблемы протекания абстракций. Проблему создают разработчики данного контракта, пытаясь сделать его универсальным или "гибким". Если контракт заставляет реализации знать о деталях внешнего окружения - абстракции текут. Если контракт заставляет внешнее окружение знать о деталях реализации - абстракции текут. Делайте строгие полные контакты и не будет проблем протечек.
@f0rzend593 ай бұрын
Это какой-то перезалив? Как будто я уже слышал этот доклад...
@Bunkerniy_Gadenish3 ай бұрын
Слышу «это база или лучшие практики» сразу посылаю скуфа накуй
@mrmarkovniktgv30583 ай бұрын
Вывод - мы в дерьме🙃
@RomanShchekin3 ай бұрын
Посыл доклада понятен, но язык для примера плохой. На Go в здравом уме никто прототипы не пишет. Есть Python, есть Java/C#, или проверенные временем (или устаревшие, каждый сам для себя решает) Ruby/Rails и PHP. В них все намного лучше в плане гибкости и готовых инструментов, которые решают задачу хорошо в большинстве случаев. А на Go потом можно переписать критичный по производительности/надёжности/иасштабируемости код, например выделив в отдельный сервис
@Inet-l6p3 ай бұрын
крутой контент, побольше бы задачек на канале
@Tosha.V3 ай бұрын
мне понравилось
@scipetr3 ай бұрын
Прохладный сказ о двух любителях писать "качественный" код...
@IgorsNemenonoks3 ай бұрын
Николай, спасибо за прекрасный доклад!
@safebuster23 ай бұрын
3:10 начало доклада
@Steklopod3 ай бұрын
Нужно было зазумить раза в 2. Ниче не видно
@kafkiansky3 ай бұрын
> Система управления зависимости чуть ли не самая прогрессивная Особенно, когда ссылки на гитхаб прямо в импорте, из-за чего при смене названия приходится весь код править, где этот импорт есть. Почему бы не сделать, как это делают другие, когда у пакета есть имя, а то, откуда его поставили, записывается в файл зависимостями (например, cargo.toml).
@hardlabor94123 ай бұрын
go 1.23 мб?
@justkrybik3 ай бұрын
1.22
@hardlabor94123 ай бұрын
@@justkrybik я не про видео, а про актуальность
@justkrybik3 ай бұрын
@@hardlabor9412 ну, до 1.23 дожить нужно)
@АлександрЗверев-й1х3 ай бұрын
Большое спасибо. Очень интересная получилась беседа
@kriskaruzo13983 ай бұрын
👏.👋👋
@hurricane-rus3 ай бұрын
Интересная задачка для олимпиады, правда, не понимаю, зачем ее дают на собеседованиях - на реальном проекте такие вещи решаются через готовые решения из Google или ChatGPT (который накидал аналогичное решение за 30 секунд - в итоге и рабочее время сэкономил, и задачу решил).
@AndreyMalashenko3 ай бұрын
Говоря о конкатенации строк можно вспомнить не такой популярный, но достаточно быстрый способ - шаблоны, пакет text/template. В бенчмарках показывает хорошие результаты. Плюс полезен, когда надо делать локализацию строк.
@MrLotrus3 ай бұрын
А из-за чего встраивание даёт просадку в производительности? Как-то вскользь затронули.
@dmitrym28413 ай бұрын
У процессора есть кеш инструкций. Чем больше бинарник, тем меньше попадание в кеш, тем больше походов в оперативу.
@MrLotrus3 ай бұрын
@@dmitrym2841 Сори, не могу уловить связь между размером бинарника и попадания в кеш процессора. Можно чуть подробнее или где почитать
@alexandersmirnov42744 ай бұрын
непонятно объясняли как CFS использует бинарное дерево для упорядочивания задач
@volumesurup20784 ай бұрын
Только уважение! Очень здорово!!!
@sergeys47324 ай бұрын
Блэт, ну почему докладчик не купит хорошую гарнитуру чтобы не крякать (((
@lordew94764 ай бұрын
потому что ....кря
@АлександрДанилов-п4г4 ай бұрын
С гарнитурой будет заикаться и пропадать. Лучше нормальный микрофон, стоящий на столе. Проводной.
@wildegor4 ай бұрын
Отличный доклад и статья на хабре (правда в статье ticker забыли остановить хехе)!
@mikez22764 ай бұрын
как это не инициализированный слайс не занимает память? var s []int s1 := []int{} fmt.Println(unsafe.Sizeof(s), unsafe.Sizeof(s1)) //24 24
@vbelogrudov4 ай бұрын
Да, Вы правы! Спасибо за поправку. Здесь корректно было бы сказать про различия сравнения обоих вариантов c nil и про то, что у пустого слайса низлежащий массив не nil fmt.Println(unsafe.SliceData(s)) // nil fmt.Println(unsafe.SliceData(s1)) // 0xabcde - все пустые слайсы указывают на один адрес пустого массива И соотвественно в видео использовать var myslice []int, а не myslice := []int{}
@MsHorbjorn5 ай бұрын
чем это отличается, от портянки в main ? если вы не можете прочитать обычный код без этого uber.fx, это проблема либо в том, что вы не умеете читать код, либо в том, что разработчик написал его крайне плохо этот uber fx можно точно так же засрать до состояния "не читабельности" если иметь, как вы сказали, 2-3 страницы такого конструктора
@MsHorbjorn5 ай бұрын
другими словами, тот код в main.go - абсолютно не проблема такого подхода, нужно уметь разделять слои и никакой uber fx не понадобится насчет тестов и прочего, так же все получается асболютно тестируемо и зависит не от того, используется fx или не используется, а правильно ли спроектированы слои
@vladimireliseev76026 ай бұрын
Спасибо за доклад! Было полезно!
@SavenkoRoman8 ай бұрын
дизлайк за отсутствие таймингов. дичь
@GoFuncConf7 ай бұрын
Роман, здравствуйте. Спасибо за фидбек, передали коллегам 🙂