Библиотека Go (Golang) разработчика
2.62K subscribers
280 photos
95 videos
29 files
348 links
Полезные материалы по всему, что может быть полезно Golang разработчику. По всем вопросам @evgenycarter
Download Telegram
Швейцария в картах Go: путешествие по Swiss Tables

Golang продолжает развиваться. Изначальные проектные решения ставятся под сомнения, а новые вызовы заставляют язык меняться: дженерики, итераторы, новая имплементация мап. Однако, даже нововведения приходят к нам не такими, как в других языках. Вспомните обсуждения сразу после релиза тех же дженериков. На Go, как мне кажется, в большинстве своём пишут люди, пришедшие из прочих языков, у кого Golang не первый ЯП. Они привыкли к другому подходу работы с абстракциями. И им порой не хватает того, что предлагает язык Гофера. Swiss Tables — попытка быть в тренде.

С вами Кирилл Кузин — ведущий подкастов про IT на канале gIT, где вместе с коллегами по цеху рассматриваем индустрию под разными углами, открывая новые горизонты для вас и самих себя. А работаю ведущим разработчиком в Ви.Tech — IT-дочке ВсеИнструменты.ру. Там мы с командой пишем внутренние системы на Go под задачи бизнеса и по ходу дела разбираемся, как наши инструменты устроены и как реально влияют на процесс разработки.

В этой статье речь пойдёт о новых мапах в версии Go 1.24, реализованных по принципу Swiss Tables — швейцарских таблиц. Попробуем найти ответы на вопросы о том, почему мапы изменились, что лежит в основе новой реализации и как к ней пришли.

👉 Читать

👉 @golang_lib
👍3
Как на Go создать Validating Admission Controller для Kubernetes.

Это веб‑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
❤‍🔥2🌚1
Vendoring, или 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
«Бобер выдыхай»: Go, WinAPI и ассемблер

Что вам приходит в голову при слове «Golang»? Google и микросервисы? Я тоже так думал, но реальность оказалась значительно интересней.

👉 Читать

👉 @golang_lib
👍2
Освоение оптимизации памяти в Go: 20 экспертных техник для эффективных приложений

Как разработчик на 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
Примеры использования client-go — официальной Go-библиотеки для взаимодействия с Kubernetes API. Репозиторий содержит набор минималистичных, но рабочих программ, которые демонстрируют, как использовать client-go для различных задач:

- Получение списка Pod'ов
- Прослушивание событий (watch)
- Использование контроллеров
- Работа с workqueue
- Создание кастомных клиентов
- Реализация информеров
- Примеры c RBAC и настройкой доступа

Каждый пример максимально изолирован и понятен, что делает репозиторий отличной стартовой точкой для тех, кто хочет разобраться, как изнутри работает Kubernetes-клиент на Go. Особенно полезно для разработчиков операторов и контроллеров.

https://github.com/iximiuz/client-go-examples

👉 @golang_lib
👍21
SURF – продвинутый HTTP-клиент для Go с имитацией браузеров Chrome/Firefox, поддержкой HTTP/3 и QUIC-фингерпринтинга, эмуляцией TLS-отпечатков JA3/JA4 и обходом антибот-защит для веб-автоматизации и парсинга.

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
Imagor - это быстрый и лёгкий сервер для обработки изображений на Go. Он умеет делать ресайз, кадрирование, фильтры и трансформации «на лету». Всё строится вокруг URL-запросов, что удобно для интеграции с CDN и микросервисами.

Особенности:

- Поддержка форматов JPEG, PNG, GIF, WebP, AVIF.
- Возможность работы с удалёнными источниками (S3, GCS и др.).
- Кэширование результатов.
- Расширяемая архитектура с плагинами.
- Совместимость с Thumbor https://github.com/thumbor/thumbor.

https://github.com/cshum/imagor

👉 @golang_lib
👍2
Go команда представила экспериментальный пакет 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
Создание простой виртуальной машины

Вдохновившись виртуальными машинами (VM), такими как WebAssembly и Ethereum Virtual Machine, я решил бросить себе вызов и создать упрощённую версию. В этой статье я расскажу о процессе реализации виртуальной машины на Go, которая работает с компилированным байткодом и выполняет базовые арифметические операции.

Стековая или регистровая машина?

При изучении базовой архитектуры виртуальных машин можно выделить два основных подхода: стековая машина и регистровая машина.

Стековая машина, как, например, WebAssembly, работает по принципу последний вошёл — первый вышел (LIFO). Инструкции в этой модели в основном оперируют данными, находящимися на вершине стека. Такой подход часто используется при реализации виртуальных машин благодаря своей простоте и лёгкости в реализации.

Регистровая машина ближе по архитектуре к современным процессорам. Она использует набор регистров (аппаратно поддерживаемых), с которыми инструкции могут работать напрямую. Этот подход может повысить скорость выполнения за счёт сокращения избыточного перемещения данных и даёт больше возможностей для оптимизации кода на этапе компиляции.

Я решил использовать стековую архитектуру, так как её простота и линейный, предсказуемый поток выполнения значительно упрощают как процесс разработки, так и отладку.

https://blog.phakorn.com/posts/2025/building-a-simple-vm/

👉 @golang_lib
👍1