Швейцария в картах Go: путешествие по Swiss Tables
Golang продолжает развиваться. Изначальные проектные решения ставятся под сомнения, а новые вызовы заставляют язык меняться: дженерики, итераторы, новая имплементация мап. Однако, даже нововведения приходят к нам не такими, как в других языках. Вспомните обсуждения сразу после релиза тех же дженериков. На Go, как мне кажется, в большинстве своём пишут люди, пришедшие из прочих языков, у кого Golang не первый ЯП. Они привыкли к другому подходу работы с абстракциями. И им порой не хватает того, что предлагает язык Гофера. Swiss Tables — попытка быть в тренде.
С вами Кирилл Кузин — ведущий подкастов про IT на канале gIT, где вместе с коллегами по цеху рассматриваем индустрию под разными углами, открывая новые горизонты для вас и самих себя. А работаю ведущим разработчиком в Ви.Tech — IT-дочке ВсеИнструменты.ру. Там мы с командой пишем внутренние системы на Go под задачи бизнеса и по ходу дела разбираемся, как наши инструменты устроены и как реально влияют на процесс разработки.
В этой статье речь пойдёт о новых мапах в версии Go 1.24, реализованных по принципу Swiss Tables — швейцарских таблиц. Попробуем найти ответы на вопросы о том, почему мапы изменились, что лежит в основе новой реализации и как к ней пришли.
👉 Читать
👉 @golang_lib
Golang продолжает развиваться. Изначальные проектные решения ставятся под сомнения, а новые вызовы заставляют язык меняться: дженерики, итераторы, новая имплементация мап. Однако, даже нововведения приходят к нам не такими, как в других языках. Вспомните обсуждения сразу после релиза тех же дженериков. На Go, как мне кажется, в большинстве своём пишут люди, пришедшие из прочих языков, у кого Golang не первый ЯП. Они привыкли к другому подходу работы с абстракциями. И им порой не хватает того, что предлагает язык Гофера. Swiss Tables — попытка быть в тренде.
С вами Кирилл Кузин — ведущий подкастов про IT на канале gIT, где вместе с коллегами по цеху рассматриваем индустрию под разными углами, открывая новые горизонты для вас и самих себя. А работаю ведущим разработчиком в Ви.Tech — IT-дочке ВсеИнструменты.ру. Там мы с командой пишем внутренние системы на Go под задачи бизнеса и по ходу дела разбираемся, как наши инструменты устроены и как реально влияют на процесс разработки.
В этой статье речь пойдёт о новых мапах в версии Go 1.24, реализованных по принципу Swiss Tables — швейцарских таблиц. Попробуем найти ответы на вопросы о том, почему мапы изменились, что лежит в основе новой реализации и как к ней пришли.
👉 Читать
👉 @golang_lib
👍3
Как на Go создать Validating Admission Controller для Kubernetes.
Это веб‑hook, который проверяет, что в каждом контейнере деплоя указаны
Автор подробно проходит через архитектуру (mutating → validating), код на Go для обработки
👉 Читать
👉 @golang_lib
Это веб‑hook, который проверяет, что в каждом контейнере деплоя указаны
memory.requests
и memory.limits
. Если хоть одно из них отсутствует — создание ресурса блокируется.Автор подробно проходит через архитектуру (mutating → validating), код на Go для обработки
AdmissionReview
, настройку TLS, манифесты для Deployment и Webhook-а, и тестирование в кластере.👉 Читать
👉 @golang_lib
👍4
Forwarded from Хакер Free
HackBrowserData
Это утилита с открытым исходным кодом на Go, предназначенная для извлечения данных из популярных браузеров. Она позволяет быстро получить пароли, cookies, историю просмотров и другие сохранённые данные.
Поддерживает работу с Chrome, Edge, Firefox, Opera и многими другими браузерами на Windows, macOS и Linux. Результаты можно экспортировать в JSON или CSV, что удобно для последующего анализа.
https://github.com/moonD4rk/HackBrowserData
🔐 @xakep_2
Это утилита с открытым исходным кодом на Go, предназначенная для извлечения данных из популярных браузеров. Она позволяет быстро получить пароли, cookies, историю просмотров и другие сохранённые данные.
Поддерживает работу с Chrome, Edge, Firefox, Opera и многими другими браузерами на Windows, macOS и Linux. Результаты можно экспортировать в JSON или CSV, что удобно для последующего анализа.
https://github.com/moonD4rk/HackBrowserData
🔐 @xakep_2
❤🔥2🌚1
Vendoring, или
Когда вы работаете с модулями в Go, компилятор обычно загружает все необходимые модули из их онлайн-источников или репозиториев и складывает их в локальный кэш. Чаще всего этот кэш находится по пути
Но если вы хотите убедиться, вы можете выполнить команду
👉 Читать
👉 @golang_lib
go mod vendor
: что это такое?Когда вы работаете с модулями в Go, компилятор обычно загружает все необходимые модули из их онлайн-источников или репозиториев и складывает их в локальный кэш. Чаще всего этот кэш находится по пути
$GOPATH/pkg/mod
.Но если вы хотите убедиться, вы можете выполнить команду
go env GOMODCACHE
, чтобы увидеть точное расположение.
$ go env GOMODCACHE
/Users/phuong/go/pkg/mod
👉 Читать
👉 @golang_lib
👍1
💻 Пишете на Go, но всё еще не уверены в интерфейсах?
📅 3 сентября в 20:00 на открытом вебинаре OTUS эксперт по Go разложит интерфейсы на атомы. Вы узнаете, как устроен тип interface изнутри и почему этот инструмент незаменим в современном Go-коде. Разберём самые распространённые ошибки и расскажем, как избегать panic при использовании интерфейсов.
Получите навыки и уверенность, чтобы писать чистый и безопасный код, избегая типичных ловушек языка. Вебинар проходит в преддверие курса «Golang Developer. Professional».
🔴 Регистрируйтесь прямо сейчас и прокачайте свой код на Go: https://vk.cc/cP1UVS
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
📅 3 сентября в 20:00 на открытом вебинаре OTUS эксперт по Go разложит интерфейсы на атомы. Вы узнаете, как устроен тип interface изнутри и почему этот инструмент незаменим в современном Go-коде. Разберём самые распространённые ошибки и расскажем, как избегать panic при использовании интерфейсов.
Получите навыки и уверенность, чтобы писать чистый и безопасный код, избегая типичных ловушек языка. Вебинар проходит в преддверие курса «Golang Developer. Professional».
🔴 Регистрируйтесь прямо сейчас и прокачайте свой код на Go: https://vk.cc/cP1UVS
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
«Бобер выдыхай»: Go, WinAPI и ассемблер
Что вам приходит в голову при слове «Golang»? Google и микросервисы? Я тоже так думал, но реальность оказалась значительно интересней.
👉 Читать
👉 @golang_lib
Что вам приходит в голову при слове «Golang»? Google и микросервисы? Я тоже так думал, но реальность оказалась значительно интересней.
👉 Читать
👉 @golang_lib
👍2
Освоение оптимизации памяти в Go: 20 экспертных техник для эффективных приложений
Как разработчик на Go, я провёл бесчисленные часы, оптимизируя использование памяти в своих приложениях. Это критически важный аспект при создании эффективного и масштабируемого ПО, особенно в условиях работы с крупными системами или ограниченными ресурсами. В этой статье я поделюсь своим опытом и наблюдениями по оптимизации использования памяти в приложениях на Golang.
Модель памяти Go спроектирована так, чтобы быть простой и эффективной. Она использует сборщик мусора, который автоматически управляет выделением и освобождением памяти. Однако понимание принципов работы сборщика мусора имеет ключевое значение для написания кода с низким потреблением памяти.
Сборщик мусора Go использует конкурентный алгоритм «mark-and-sweep» с трёхцветной маркировкой. Он работает параллельно с приложением, что означает отсутствие полной приостановки программы во время сборки мусора. Такой подход обеспечивает низкую задержку работы GC, но также накладывает свои ограничения.
Для оптимизации использования памяти необходимо минимизировать количество выделений. Один из эффективных способов — использовать более подходящие структуры данных. Например, заранее выделенный срез вместо постоянного добавления элементов через
👉 Читать
👉 @golang_lib
Как разработчик на Go, я провёл бесчисленные часы, оптимизируя использование памяти в своих приложениях. Это критически важный аспект при создании эффективного и масштабируемого ПО, особенно в условиях работы с крупными системами или ограниченными ресурсами. В этой статье я поделюсь своим опытом и наблюдениями по оптимизации использования памяти в приложениях на Golang.
Модель памяти Go спроектирована так, чтобы быть простой и эффективной. Она использует сборщик мусора, который автоматически управляет выделением и освобождением памяти. Однако понимание принципов работы сборщика мусора имеет ключевое значение для написания кода с низким потреблением памяти.
Сборщик мусора Go использует конкурентный алгоритм «mark-and-sweep» с трёхцветной маркировкой. Он работает параллельно с приложением, что означает отсутствие полной приостановки программы во время сборки мусора. Такой подход обеспечивает низкую задержку работы GC, но также накладывает свои ограничения.
Для оптимизации использования памяти необходимо минимизировать количество выделений. Один из эффективных способов — использовать более подходящие структуры данных. Например, заранее выделенный срез вместо постоянного добавления элементов через
append
может значительно сократить количество аллокаций.👉 Читать
👉 @golang_lib
👍2
🫵 Хотите освоить новый язык программирования и увидеть результат уже на первом занятии?
Приглашаем на открытый урок «Hello, Go! С нуля до первого кода за 1,5 часа». За 90 минут вместе с практикующим экспертом вы установите Go, разберётесь с базовым синтаксисом и напишете свою первую программу.
❗️ Этот урок — идеальный старт для тех, кто давно хотел попробовать Golang: никаких сложных терминов, только полезные приёмы и понятные примеры. Узнаете, как устроены пакеты, функции, переменные и запустите своё приложение. А в конце получите пошаговый план дальнейшего изучения Go.
Встречаемся 4 сентября в 20:00 МСК. Участие бесплатно. Регистрация открыта: https://vk.cc/cPaRhR
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Приглашаем на открытый урок «Hello, Go! С нуля до первого кода за 1,5 часа». За 90 минут вместе с практикующим экспертом вы установите Go, разберётесь с базовым синтаксисом и напишете свою первую программу.
❗️ Этот урок — идеальный старт для тех, кто давно хотел попробовать Golang: никаких сложных терминов, только полезные приёмы и понятные примеры. Узнаете, как устроены пакеты, функции, переменные и запустите своё приложение. А в конце получите пошаговый план дальнейшего изучения Go.
Встречаемся 4 сентября в 20:00 МСК. Участие бесплатно. Регистрация открыта: https://vk.cc/cPaRhR
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Примеры использования
- Получение списка Pod'ов
- Прослушивание событий (watch)
- Использование контроллеров
- Работа с workqueue
- Создание кастомных клиентов
- Реализация информеров
- Примеры c RBAC и настройкой доступа
Каждый пример максимально изолирован и понятен, что делает репозиторий отличной стартовой точкой для тех, кто хочет разобраться, как изнутри работает Kubernetes-клиент на Go. Особенно полезно для разработчиков операторов и контроллеров.
https://github.com/iximiuz/client-go-examples
👉 @golang_lib
client-go
— официальной Go-библиотеки для взаимодействия с Kubernetes API. Репозиторий содержит набор минималистичных, но рабочих программ, которые демонстрируют, как использовать client-go
для различных задач:- Получение списка Pod'ов
- Прослушивание событий (watch)
- Использование контроллеров
- Работа с workqueue
- Создание кастомных клиентов
- Реализация информеров
- Примеры c RBAC и настройкой доступа
Каждый пример максимально изолирован и понятен, что делает репозиторий отличной стартовой точкой для тех, кто хочет разобраться, как изнутри работает Kubernetes-клиент на Go. Особенно полезно для разработчиков операторов и контроллеров.
https://github.com/iximiuz/client-go-examples
👉 @golang_lib
👍2❤1
SURF – продвинутый HTTP-клиент для Go с имитацией браузеров Chrome/Firefox, поддержкой HTTP/3 и QUIC-фингерпринтинга, эмуляцией TLS-отпечатков JA3/JA4 и обходом антибот-защит для веб-автоматизации и парсинга.
https://github.com/enetx/surf
👉 @golang_lib
https://github.com/enetx/surf
👉 @golang_lib
👍6
Чувствуете, что ваш Go-код тормозит под нагрузкой?
Приглашаем на открытый урок «Golang: когда многопоточность работает против вас». Узнайте, почему горутины и каналы иногда оборачиваются узкими местами и как это исправить.
Наш эксперт разберет внутренний планировщик Go, покажет типичные проблемы производительности и научит искать «тормоза» в конкурентном коде. Вы получите готовые паттерны оптимизации, которые ускорят ваши сервисы без лишних гаджетов.
📅 Встречаемся 16 сентября в 20:00 МСК. Открытый урок проходит в преддверие старта курса «Golang Developer. Professional».
👉 Запишитесь на открытый урок → https://vk.cc/cPrevx
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Приглашаем на открытый урок «Golang: когда многопоточность работает против вас». Узнайте, почему горутины и каналы иногда оборачиваются узкими местами и как это исправить.
Наш эксперт разберет внутренний планировщик Go, покажет типичные проблемы производительности и научит искать «тормоза» в конкурентном коде. Вы получите готовые паттерны оптимизации, которые ускорят ваши сервисы без лишних гаджетов.
📅 Встречаемся 16 сентября в 20:00 МСК. Открытый урок проходит в преддверие старта курса «Golang Developer. Professional».
👉 Запишитесь на открытый урок → https://vk.cc/cPrevx
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Imagor - это быстрый и лёгкий сервер для обработки изображений на Go. Он умеет делать ресайз, кадрирование, фильтры и трансформации «на лету». Всё строится вокруг URL-запросов, что удобно для интеграции с CDN и микросервисами.
Особенности:
- Поддержка форматов JPEG, PNG, GIF, WebP, AVIF.
- Возможность работы с удалёнными источниками (S3, GCS и др.).
- Кэширование результатов.
- Расширяемая архитектура с плагинами.
- Совместимость с Thumbor https://github.com/thumbor/thumbor.
https://github.com/cshum/imagor
👉 @golang_lib
Особенности:
- Поддержка форматов JPEG, PNG, GIF, WebP, AVIF.
- Возможность работы с удалёнными источниками (S3, GCS и др.).
- Кэширование результатов.
- Расширяемая архитектура с плагинами.
- Совместимость с Thumbor https://github.com/thumbor/thumbor.
https://github.com/cshum/imagor
👉 @golang_lib
👍2
Go команда представила экспериментальный пакет
Он решает давние проблемы стандартного
- Более строгая типобезопасность.
- Улучшенная производительность при маршалинге/анмаршалинге.
- Чёткая работа с
- Новый API, учитывающий опыт использования старой версии.
- Возможность расширяемости и будущих улучшений без «поломки» совместимости.
Старый пакет
https://go.dev/blog/jsonv2-exp
👉 @golang_lib
encoding/json/v2
.Он решает давние проблемы стандартного
encoding/json
:- Более строгая типобезопасность.
- Улучшенная производительность при маршалинге/анмаршалинге.
- Чёткая работа с
null
, отсутствием полей и нулевыми значениями.- Новый API, учитывающий опыт использования старой версии.
- Возможность расширяемости и будущих улучшений без «поломки» совместимости.
Старый пакет
encoding/json
никуда не исчезает - он остаётся стабильным. Но постепенно рекомендуется тестировать v2
и давать обратную связь.https://go.dev/blog/jsonv2-exp
👉 @golang_lib
👍3
Хотите попробовать себя в бэкенде, но страшно уйти от фронта?
Это чувство знакомо каждому фронтендеру: сложно оставить родной JS и Webpack и отправиться в неизведанный мир API, баз данных и Docker.
На открытом уроке мы покажем, что переход на Golang — это проще, чем кажется. Вместе разберём, как перенести знакомые фронтендеру навыки в мир Go, создадим работающий API всего за 15 минут и убедимся, что Go — это удобно, логично и выгодно.
📅 Не упускайте шанс открыть для себя новые горизонты в разработке! Встречаемся 17 сентября в 20:00 МСК.
👉 Запишитесь на открытый урок → https://vk.cc/cPxWno
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Это чувство знакомо каждому фронтендеру: сложно оставить родной JS и Webpack и отправиться в неизведанный мир API, баз данных и Docker.
На открытом уроке мы покажем, что переход на Golang — это проще, чем кажется. Вместе разберём, как перенести знакомые фронтендеру навыки в мир Go, создадим работающий API всего за 15 минут и убедимся, что Go — это удобно, логично и выгодно.
📅 Не упускайте шанс открыть для себя новые горизонты в разработке! Встречаемся 17 сентября в 20:00 МСК.
👉 Запишитесь на открытый урок → https://vk.cc/cPxWno
Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
Создание простой виртуальной машины
Вдохновившись виртуальными машинами (VM), такими как WebAssembly и Ethereum Virtual Machine, я решил бросить себе вызов и создать упрощённую версию. В этой статье я расскажу о процессе реализации виртуальной машины на Go, которая работает с компилированным байткодом и выполняет базовые арифметические операции.
Стековая или регистровая машина?
При изучении базовой архитектуры виртуальных машин можно выделить два основных подхода: стековая машина и регистровая машина.
Стековая машина, как, например, WebAssembly, работает по принципу последний вошёл — первый вышел (LIFO). Инструкции в этой модели в основном оперируют данными, находящимися на вершине стека. Такой подход часто используется при реализации виртуальных машин благодаря своей простоте и лёгкости в реализации.
Регистровая машина ближе по архитектуре к современным процессорам. Она использует набор регистров (аппаратно поддерживаемых), с которыми инструкции могут работать напрямую. Этот подход может повысить скорость выполнения за счёт сокращения избыточного перемещения данных и даёт больше возможностей для оптимизации кода на этапе компиляции.
Я решил использовать стековую архитектуру, так как её простота и линейный, предсказуемый поток выполнения значительно упрощают как процесс разработки, так и отладку.
https://blog.phakorn.com/posts/2025/building-a-simple-vm/
👉 @golang_lib
Вдохновившись виртуальными машинами (VM), такими как WebAssembly и Ethereum Virtual Machine, я решил бросить себе вызов и создать упрощённую версию. В этой статье я расскажу о процессе реализации виртуальной машины на Go, которая работает с компилированным байткодом и выполняет базовые арифметические операции.
Стековая или регистровая машина?
При изучении базовой архитектуры виртуальных машин можно выделить два основных подхода: стековая машина и регистровая машина.
Стековая машина, как, например, WebAssembly, работает по принципу последний вошёл — первый вышел (LIFO). Инструкции в этой модели в основном оперируют данными, находящимися на вершине стека. Такой подход часто используется при реализации виртуальных машин благодаря своей простоте и лёгкости в реализации.
Регистровая машина ближе по архитектуре к современным процессорам. Она использует набор регистров (аппаратно поддерживаемых), с которыми инструкции могут работать напрямую. Этот подход может повысить скорость выполнения за счёт сокращения избыточного перемещения данных и даёт больше возможностей для оптимизации кода на этапе компиляции.
Я решил использовать стековую архитектуру, так как её простота и линейный, предсказуемый поток выполнения значительно упрощают как процесс разработки, так и отладку.
https://blog.phakorn.com/posts/2025/building-a-simple-vm/
👉 @golang_lib
👍1