- 42
- 39 838
GoFunc
Приєднався 22 сер 2023
GoFunc - конференция для тех, кто использует Go в своих проектах.
Мы сосредоточимся на том, как правильно создавать и эксплуатировать сервисы на Go. Будем учиться эффективно использовать современные подходы и фреймворки при разработке приложений, обработке данных и разворачивании нагруженных систем. Кроме того, постараемся заглянуть за пределы стандартных возможностей Go runtime.
Ближайшая конференция: GoFunc 2025, даты будут анонсированы позднее.
Подробности и билеты: jrg.su/pM2xkl
Организатор - JUG Ru Group.
Основные темы конференции:
- Language || Runtime (Generics, Channels, Goroutines)
- Infrastructure || DevOps (Cloud Native, Observability, Security, K8s, CI/CD)
- Libraries || Tools (Databases && ORM, Kafka, NATS, RPC, GoLand, NeoVim, VSCode)
Мы сосредоточимся на том, как правильно создавать и эксплуатировать сервисы на Go. Будем учиться эффективно использовать современные подходы и фреймворки при разработке приложений, обработке данных и разворачивании нагруженных систем. Кроме того, постараемся заглянуть за пределы стандартных возможностей Go runtime.
Ближайшая конференция: GoFunc 2025, даты будут анонсированы позднее.
Подробности и билеты: jrg.su/pM2xkl
Организатор - JUG Ru Group.
Основные темы конференции:
- Language || Runtime (Generics, Channels, Goroutines)
- Infrastructure || DevOps (Cloud Native, Observability, Security, K8s, CI/CD)
- Libraries || Tools (Databases && ORM, Kafka, NATS, RPC, GoLand, NeoVim, VSCode)
Закрытие конференции GoFunc 2024
Подробнее о конференции GoFunc: jrg.su/xlvG08
- -
Подводим итоги, вспоминаем яркие моменты и рассказываем о дальнейших планах.
Ведущие: Илья Горкун, Александр Кондрашов.
- -
Подводим итоги, вспоминаем яркие моменты и рассказываем о дальнейших планах.
Ведущие: Илья Горкун, Александр Кондрашов.
Переглядів: 66
Відео
Открытие. 2 день GoFunc 2024
Переглядів 582 місяці тому
Подробнее о конференции GoFunc: jrg.su/xlvG08 - - Говорим о расписании, сессиях и активностях. Ведущие: Илья Горкун,Андрей Дмитриев.
Открытие конференции GoFunc 2024
Переглядів 872 місяці тому
Подробнее о конференции GoFunc: jrg.su/xlvG08 - - Говорим о расписании, сессиях и делимся информацией. Ведущие: Илья Горкун, Андрей Дмитриев.
Александр Иванов - Снижаем нагрузку на Garbage Collector с помощью различных memory pool'ов
Переглядів 3362 місяці тому
Подробнее о конференции GoFunc: jrg.su/xlvG08 - - Скачать презентацию с сайта GoFunc - jrg.su/7lsmM9 Как-то Александр работал над приложением, которое испытывало пиковые нагрузки при получении новых данных и не успевало поставить их в централизованную обработку. Профилирование показало, что дело было не в какой-то медленной time-critical функции, а в том, что в кульминационный момент из-за нехв...
Илья Сухов - Внутреннее устройство мьютексов в Go
Переглядів 5102 місяці тому
Подробнее о конференции GoFunc: jrg.su/xlvG08 - - Скачать презентацию с сайта GoFunc - jrg.su/USaG2J Что такое мьютексы и для чего они используются? Во время доклада разобрались с мьютексами, а также с их внутренним устройством. Из чего состоят и как работают sync.Mutex и sync.RWMutex, в чем особенности их внутреннего устройства. Выводы и особенности использования.
Егор Лазаренков - Когда нельзя, но очень хочется - GO!
Переглядів 6152 місяці тому
Подробнее о конференции GoFunc: jrg.su/xlvG08 - - Скачать видео с сайта GoFunc - jrg.su/nosGL9 Разобрали обход всех ограничений, характерных для ООП (получение полного доступа к приватным полям, функциям, методам и типам другого пакета), и ситуации, когда это лучшее решение. Разобрались, как изменить код программы после ее компиляции. Написали простую программу на Gо и взломаем ее при помощи ID...
Дмитрий Королев - Популярные ошибки в Golang и как их избежать
Переглядів 7572 місяці тому
Подробнее о конференции GoFunc: jrg.su/xlvG08 - - Скачать презентацию с сайта GoFunc - jrg.su/B6OMc5 Go, в отличие от многих других низкоуровневых языков, довольно дружелюбный для разработчика язык. Но даже в нем есть ситуации, в которых очень легко допустить неочевидную ошибку. И для разработчика любого уровня важно знать, почему такие ошибки возникают и как их избегать. Рассмотрели наиболее р...
Искандер Шарипов - Пишем XM-плеер на Go и используем его в играх
Переглядів 4792 місяці тому
Подробнее о конференции GoFunc: jrg.su/xlvG08 - - Скачать презентацию с сайта GoFunc - jrg.su/amTn4r Есть такой формат модульной музыки - XM. Она компактная, хорошо звучит и относительно эффективная в воспроизведении. В рамках доклада спикер показал XM-плеер, который он написал на Go, чтобы затем использовать в своих играх. Рассказал о деталях формата, внутренностях плеера, а еще об играх, где ...
Дмитрий Кулагин - Как ускорить код, не меняя алгоритм
Переглядів 3622 місяці тому
Подробнее о конференции GoFunc: jrg.su/xlvG08 - - Скачать презентацию с сайта GoFunc - jrg.su/NJ9xql Распаковка 7-Zip архива самой популярной Go-библиотеки (github.com/bodgit/sevenzip) происходит медленно. Дмитрий рассказал о подходах к оптимизации Go-кода, который декомпрессирует поток из 7-Zip архива. Технологии: Golang, LZMA, pprof. Будет интересно Go-разработчикам уровня middle/senior.
Владислав Сидоров - Protobuf в Go
Переглядів 4402 місяці тому
Подробнее о конференции GoFunc: jrg.su/xlvG08 - - Скачать презентацию с сайта GoFunc - jrg.su/jqeqqq Владислав рассказал, почему в его компании используют Protobuf, привел наглядные примеры использования. Поговорил про наиболее типичные проблемы и боли, вызванные нарушением рекомендаций по обновлению сообщений. Продемонстрировал, что необходимо делать, чтобы избегать таких проблем.
Владимир Богринцев - Фоновые задачи. Надежность или скорость?
Переглядів 3552 місяці тому
Подробнее о конференции GoFunc: jrg.su/xlvG08 - - Скачать презентацию с сайта GoFunc - jrg.su/fXUcAh Проблематика и необходимость использования фоновых задач по расписанию. Часто встречающиеся подходы. Сравнительная диагностика разных подходов по различным критериям. Технологии: рутины, воркеры, go-cron, Pulsar, kube cronjobs, cloud и другие. Будет интересно любому разработчику промышленных циф...
Святослав Петров - Облегчаем жизнь разработчикам при помощи плагинов protoc
Переглядів 1922 місяці тому
Подробнее о конференции GoFunc: jrg.su/xlvG08 - - Скачать презентацию с сайта GoFunc - jrg.su/fNPDFg По всему миру разработчики используют Protobuf как plug-n-play решение, даже не задумываясь о том, как работает его тулчейн и как его можно переиспользовать для собственных целей. Разобрались в том, как устроен Protobuf и его тулчейн на низком уровне (protoc плагины), как написать свой плагин на...
Александр Шакмаев - gRPC Middleware в Go как способ модифицировать все запросы в одном месте
Переглядів 3023 місяці тому
Подробнее о конференции GoFunc: jrg.su/xlvG08 - - Скачать презентацию с сайта GoFunc - jrg.su/P3Rlez В Cloud.ru ценят время пользователей и стремятся не возвращать ошибки на сторону клиента. Особенно если в запрос случайно проскочил бесполезный пробел или символ переноса строки. Решение в лоб - писать валидаторы и модификаторы внутри всех контроллеров. Но что, если контроллеров очень много? Как...
Евгений Конечный - Как обрабатывать 1TБ гистологических исследований в день
Переглядів 3593 місяці тому
Подробнее о конференции GoFunc: jrg.su/xlvG08 - - Скачать презентацию с сайта GoFunc - jrg.su/02ZvxE Вы тоже думаете, что врач-патологоанатом только и делает, что проводит вскрытия? Тогда вы заблуждаетесь, ведь на самом деле патологоанатомы 90% времени тратят на прижизненную диагностику, особенно в области гистологических исследований. Во время доклада Евгений рассказал, что такое гистологическ...
Константин Кастырин - Domain-Driven Design. Практический минимум
Переглядів 8363 місяці тому
Подробнее о конференции GoFunc: jrg.su/xlvG08 - - Скачать презентацию с сайта GoFunc - jrg.su/PYQuNW - Насколько легко разработчику понять бизнес-ответственность кода? - Можете ли вы заметить конфликт существующего кода и новых бизнес-требований? - Можно ли быть уверенным, что, изменяя какие-то данные, мы сохраняем бизнес-модель в консистентном состоянии? - Как заставить код говорить с разработ...
Антон Цитульский - Чем отличается Saga от Workflow
Переглядів 4623 місяці тому
Антон Цитульский - Чем отличается Saga от Workflow
GoFunc Podcast. GoFunc-пазл 2.0: зачем выступать и о чем рассказывать
Переглядів 2573 місяці тому
GoFunc Podcast. GoFunc-пазл 2.0: зачем выступать и о чем рассказывать
Николай Ушков - Базы, деньги и Go Way
Переглядів 1,1 тис.3 місяці тому
Николай Ушков - Базы, деньги и Go Way
Go 1.22 - новые возможности и технологии
Переглядів 2,2 тис.4 місяці тому
Go 1.22 - новые возможности и технологии
Развитие сложных и высоконагруженных проектов на Go
Переглядів 8234 місяці тому
Развитие сложных и высоконагруженных проектов на Go
Макс Ривейро - PGO: практика и маленькие хитрости использования
Переглядів 6764 місяці тому
Макс Ривейро - PGO: практика и маленькие хитрости использования
Роман Чалый - Строка: от известного к неизвестному
Переглядів 1 тис.4 місяці тому
Роман Чалый - Строка: от известного к неизвестному
Алексей Акулович - gRPC: Under the Hood
Переглядів 1,9 тис.4 місяці тому
Алексей Акулович - gRPC: Under the Hood
Владислав Белогрудов - Типы данных под капотом: слайсы и как их готовить
Переглядів 2,2 тис.4 місяці тому
Владислав Белогрудов - Типы данных под капотом: слайсы и как их готовить
Александр Козлов и Максим Чудновский, СберТех - Расширяем Service Mesh Istio Wasm-модулем на Go
Переглядів 2217 місяців тому
Александр Козлов и Максим Чудновский, СберТех - Расширяем Service Mesh Istio Wasm-модулем на Go
GoFunc Podcast. Собираем GoFunc-пазл: что будет и что стоит добавить
Переглядів 2529 місяців тому
GoFunc Podcast. Собираем GoFunc-пазл: что будет и что стоит добавить
Сергей Антоничев - «gRPC-стримы на практике в Go»
Переглядів 3,1 тис.10 місяців тому
Сергей Антоничев - «gRPC-стримы на практике в Go»
Данила Проценко - Бардак в main, стандартизация и uber.fx. V2
Переглядів 1,8 тис.10 місяців тому
Данила Проценко - Бардак в main, стандартизация и uber.fx. V2
Откройте для себя Temporal и закройте свои велосипеды.
Лайк подписка
наконец-то в go придумали манки патчинг
Попробовал все инструменты для чтения QR в конце - ни один не считывает. Для таких вещей, наверное, стоит оставлять нормальные ссылки?
очень круто, спасибо! мало кто понимает и освещает как работает код на низком уровне теперь, и как с ним можно работать, очень круто посмотреть видео с хорошо структурированным объяснением, конечно использовать это все в проде я бы не стал и бил бы по рукам в issue тем кто пишет библиотеки вынуждая кого-то использовать подмену, но давайте еще такой контент! =)
спасибо)🙂
Спасибо за видео! специально не искал, но проблема с телеметрией глобально через драйвер ОЧЕНЬ давно меня интересовала.
Без таймкодов не то.
Здравствуйте! Передали пожелание по тайм-кодам коллегам 🙂
А слышали про Skypro и что думаете об обучении там? мне друзья посоветовали попробовать Skypro, говорят, там все хорошо объясняют
прикольная экономия на рекламу у вас не хотели ли граффити по городу красить ваших курсов прям на асфальт в переходах? я бы прошелся по ней
С Time.After в новых версиях гошки уже не леквид
Странно, что люди не хотят добавить Трейсер в библиотеку, хотя драйвер хороший, использую
lockSlow schema по ссылке из гитхаба - пишет что Ничего не найдено
А слышали про Skypro и что думаете об обучении там? мне друзья посоветовали попробовать Skypro, говорят, там все хорошо объясняют
Доклад интересный, но спорный. Где гарантия что Ваня так быстро напилит 30 фич, если делает тяп ляп лишь бы работало? Там такая может быть связанность кода, что на 10 фиче Ваня завалит весь проект, сам запутавшись в своих дебрях. И почему считается что Петя такой тормоз, правильно спроектировав систему, не сможет относительно быстро внедрять новые фичи? Преждевременная оптимизация зло, но и тяп ляп лишь бы работало тоже... Получается Вася выиграл только за счет Gorm?)) Сомнительный рецепт успеха. Любой инструмент надо знать и уметь применять когда нужно. Нормально делай - нормально будет (с) PS. В pgx v5 можно сразу сканить в структуру - не переписывая сканы по полям. Аргумент про ручные сканы без gorm давно не актуален.
Забыли про сжатие различными алгоритмами при записи в кафку. Стоит начать с тестов сжятия на кафке, перед переходом на proto.
Искандер ♥
А ты довольно симпатичный
36:00 про коммиты с генерированным кодом. При всём уважении позвольте не согласиться с тем что надо коммитить, а не генерировать с CI/CD. Проблема возникает когда с модулем работает несколько разрабов. Если гит начинает один из файлов воспринимать как бинарный (например из-за больших размеров или есть правило для гита) или генерируемый код существенно различается с каждой генерацией то на этом файле будет постоянный конфликт со вторым разоаботчиком. Этот эффект постоянно наблюдается в фронтенд разработке - там скомпилированные пакеты имеют размер мегабайты и если фронтендеров больше одного конфликты возникают всё время и разруливаются они только в пользу одного из разработчиков потому что файл меняется целиком. При генерации "на месте" конфликты возникают только в реально конфликтной ситуации - когда два разработчика работают над одним и тем же куском кода.
проблема начинается, если мы создаем dto(request/response/form/viewobject) для entity. Если для entity у нас создается дополнительные классы(домменные объекты в данном случае), то их нужно продублировать, вместе с их полями в дто. И это лютое количество кода. У нас около 50 моделей в одном апи, и 50-100 в другом, и такой подход очень сильно усложнил бы жизнь при нашем коллективе в 7 разрабов. Я пока делаю вывод, что DDD в той же топке, что и микросервисы - подходов для компаний со сверхдоходами и раздутым штатом, где на каждый микросервис по несколько разрабов, и есть время веселиться с кодом.
Хороший доклад
23:30 правда чтоли не надо проверять? p.setName("88005553535", "yo man!") компилятор не пикнет даже. потому что в го нет никакой поддержки opaque типов, все алиасы прозрачные, значит valuetypes придется заворачивать в номинальные типы
Неплохой доклад. Чувствуется, будто докладчик волнуется и, как будто читает текст. Но содержимое очень хорошее
Очень информативно, молодцы!
GO - кал между ассемблером и факторио
Если я правильно понял, в представленной структуре слой application зависит от infrastructure. В луковой и подобным архитектурам как раз наоборот infrastructure должна зависеть от application. Полагаю, автор доклада изменил направление зависимости, чтобы было проще дергать инфру из application не плодя лишние интерфейсы? Тогда это неправильно называть луковой архитектурой.
Нет, инфраструктура на то и инфраструктура, чтобы стоять особняком: в ней находятся детали реализации типа "как отправить емейл", или "как ходить в базу" и т.п. В аппликейшен лейере вы описываете конкретные бизнес юзкейсы, например, достать из репозитория объект, запустить на нем доменную логику, отправить емейл после и т.д.
@@mtk6188 я понимаю, что размещается в инфре, что в app слое, что в доменке. Нарушать зависимости слоев неправильно, если хотите луковую/чистую/хексагональную архитектуру. Никто не запрещает из app слоя обращаться к репозиторию, на то и придуманы интерфейсы и IoC.
Выносить интерфейсы в go в отдельный пакет - такое себе решение, сразу оказывается что интерфейс становится публичным, а значит может где-то использоватся - а это уже протекание абстракций. Интерфейсы должны объявляться в том же месте где и используются Использовать функцию init - это антипаттерн - неявное выполнение кода, тем более с if. Для настройки лучше использовать репозиторий с несколькими реализациями. application и service - граница какая-то вялая между ними Короче, питонист пришел в гошку и наводит шорох
Вопрос по поводу интерфейсов. Допустим есть интерфейс репозитория. Репозиторий нужно использовать в нескольких местах (сервисах). Что вы предлагаете? Копи-пастить интерфейс в два места?
Там где вы его реализуете
Интерфейсы на то и нужны, чтобы быть публичными ) Чтобы внешний код был зависим от контракта, а не от реализации. Если интерфейс приватный и лежит рядом с реализацией, в чем тогда его смысл? Сам по себе публичный интерфейс не создаёт проблемы протекания абстракций. Проблему создают разработчики данного контракта, пытаясь сделать его универсальным или "гибким". Если контракт заставляет реализации знать о деталях внешнего окружения - абстракции текут. Если контракт заставляет внешнее окружение знать о деталях реализации - абстракции текут. Делайте строгие полные контакты и не будет проблем протечек.
Это какой-то перезалив? Как будто я уже слышал этот доклад...
Слышу «это база или лучшие практики» сразу посылаю скуфа накуй
Вывод - мы в дерьме🙃
Посыл доклада понятен, но язык для примера плохой. На Go в здравом уме никто прототипы не пишет. Есть Python, есть Java/C#, или проверенные временем (или устаревшие, каждый сам для себя решает) Ruby/Rails и PHP. В них все намного лучше в плане гибкости и готовых инструментов, которые решают задачу хорошо в большинстве случаев. А на Go потом можно переписать критичный по производительности/надёжности/иасштабируемости код, например выделив в отдельный сервис
крутой контент, побольше бы задачек на канале
мне понравилось
Прохладный сказ о двух любителях писать "качественный" код...
Николай, спасибо за прекрасный доклад!
3:10 начало доклада
Нужно было зазумить раза в 2. Ниче не видно
> Система управления зависимости чуть ли не самая прогрессивная Особенно, когда ссылки на гитхаб прямо в импорте, из-за чего при смене названия приходится весь код править, где этот импорт есть. Почему бы не сделать, как это делают другие, когда у пакета есть имя, а то, откуда его поставили, записывается в файл зависимостями (например, cargo.toml).
go 1.23 мб?
1.22
@@justkrybik я не про видео, а про актуальность
@@hardlabor9412 ну, до 1.23 дожить нужно)
Большое спасибо. Очень интересная получилась беседа
👏.👋👋
Интересная задачка для олимпиады, правда, не понимаю, зачем ее дают на собеседованиях - на реальном проекте такие вещи решаются через готовые решения из Google или ChatGPT (который накидал аналогичное решение за 30 секунд - в итоге и рабочее время сэкономил, и задачу решил).
Говоря о конкатенации строк можно вспомнить не такой популярный, но достаточно быстрый способ - шаблоны, пакет text/template. В бенчмарках показывает хорошие результаты. Плюс полезен, когда надо делать локализацию строк.
А из-за чего встраивание даёт просадку в производительности? Как-то вскользь затронули.
У процессора есть кеш инструкций. Чем больше бинарник, тем меньше попадание в кеш, тем больше походов в оперативу.
@@dmitrym2841 Сори, не могу уловить связь между размером бинарника и попадания в кеш процессора. Можно чуть подробнее или где почитать
непонятно объясняли как CFS использует бинарное дерево для упорядочивания задач
Только уважение! Очень здорово!!!
Блэт, ну почему докладчик не купит хорошую гарнитуру чтобы не крякать (((
потому что ....кря
С гарнитурой будет заикаться и пропадать. Лучше нормальный микрофон, стоящий на столе. Проводной.
Отличный доклад и статья на хабре (правда в статье ticker забыли остановить хехе)!
как это не инициализированный слайс не занимает память? var s []int s1 := []int{} fmt.Println(unsafe.Sizeof(s), unsafe.Sizeof(s1)) //24 24
Да, Вы правы! Спасибо за поправку. Здесь корректно было бы сказать про различия сравнения обоих вариантов c nil и про то, что у пустого слайса низлежащий массив не nil fmt.Println(unsafe.SliceData(s)) // nil fmt.Println(unsafe.SliceData(s1)) // 0xabcde - все пустые слайсы указывают на один адрес пустого массива И соотвественно в видео использовать var myslice []int, а не myslice := []int{}
чем это отличается, от портянки в main ? если вы не можете прочитать обычный код без этого uber.fx, это проблема либо в том, что вы не умеете читать код, либо в том, что разработчик написал его крайне плохо этот uber fx можно точно так же засрать до состояния "не читабельности" если иметь, как вы сказали, 2-3 страницы такого конструктора
другими словами, тот код в main.go - абсолютно не проблема такого подхода, нужно уметь разделять слои и никакой uber fx не понадобится насчет тестов и прочего, так же все получается асболютно тестируемо и зависит не от того, используется fx или не используется, а правильно ли спроектированы слои
Спасибо за доклад! Было полезно!
дизлайк за отсутствие таймингов. дичь
Роман, здравствуйте. Спасибо за фидбек, передали коллегам 🙂