Библиотека Go (Golang) разработчика
2.63K subscribers
282 photos
95 videos
29 files
350 links
Полезные материалы по всему, что может быть полезно Golang разработчику. По всем вопросам @evgenycarter
Download Telegram
🔥 Go Maps Explained: Как на самом деле хранятся пары ключ-значение

Go map — это встроенный тип данных, который реализует хеш-таблицу для хранения пар ключ–значение. В статье рассматриваются важные детали работы map в Go, которые часто упускают из виду, и даются практические рекомендации по их использованию.

Ключевые моменты:

Неупорядоченность
Go не гарантирует порядок обхода элементов в map. Если нужен определённый порядок, нужно использовать срез для сортировки ключей перед обходом.

Zero value
Нулевое значение для mapnil. Обращение к неинициализированной карте для чтения безопасно и вернёт нулевое значение для типа, но запись в неё приведёт к панике. Создавать карту можно через make() или литерал.

Удаление элементов
Удаление производится функцией delete(m, key). Если ключа нет — операция безопасна, ошибок не будет.

Проверка существования ключа
При чтении из карты можно использовать «двухзначную» форму:


value, ok := m[key]


где ok — булево значение, указывающее на наличие ключа.

Память и рост
Go автоматически увеличивает ёмкость карты при необходимости, но уменьшения после удаления большого числа элементов не происходит — память будет удерживаться до освобождения карты целиком.

Конкурентный доступ
Карты в Go не потокобезопасны. Параллельная запись и чтение могут привести к панике. Для защиты используют sync.Mutex или sync.Map.


👉 Читать

👉 @golang_lib
👍4
Яндекс создаёт продукты и сервисы для миллионов пользователей. Нейросетевой поиск, умные устройства, машинный перевод — задачи, где нет готовых решений.

Поэтому нам нужны сильные бэкенд-разработчики! Если у вас от 5 лет опыта на C++, Python, Java или Go — участвуйте в Мультитреке.

Как это работает
• Подаёте заявку до 18 августа
• Проходите технические секции 23 и 24 августа
• Получаете офер 24 августа

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

Узнайте подробности и оставьте заявку.
👍1🤡1
Stream: 10-недельная онбординг-программа для бэкенд-инженеров на Go

Добро пожаловать в Stream. Если вы читаете публичную версию этого текста, загляните на нашу страницу с вакансиями. Сейчас мы нанимаем специалистов по Go — от начинающего уровня до ведущих инженеров и директоров.

Stream — это API для создания чатов, живого видео и лент активности. Мы обеспечиваем работу тысяч приложений и охватываем более миллиарда конечных пользователей. Такие приложения, как Strava, Nextdoor, IBM, Adobe и Patreon, полагаются на наши технологии.

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

Эта 10-недельная программа онбординга по Go охватывает несколько тем:

- Основы Go и производительность
- Базы данных, масштабирование и Redis. Распространённые шаблоны масштабируемости
- Лучшие практики тестирования
- Ревью, метрики, обработка ошибок и полный жизненный цикл кода
- Raft и WebRTC

Во время этого онбординга мы работаем в группе и берём реальный проект - лучший способ учиться это сочетать теорию с практикой. Добро пожаловать, начнём!

👉 Читать

👉 @golang_lib
1👍1
Media is too big
VIEW IN TELEGRAM
Doom на Go

Это минималистичный, независимый от платформ порт легендарного движка DOOM на Go, транслированный из кодовой базы doomgeneric.

Никакого CGo. Никаких зависимостей от платформы.

Оригинальный код на C был конвертирован в Go с помощью modernc.org/ccgo/v4 авторства cznic (репозиторий doomgeneric).
После этого он был вручную переработан: удалено множество операций с указателями, код стал более «в духе Go», но при этом сохранил совместимость с оригинальным DOOM и его архитектурой.

https://github.com/AndreRenaud/gore

👉 @golang_lib
👍1😁1
Как упорядочить код на Go и сделать его масштабируемым?

➡️ На открытом уроке 20 августа в 20:00 МСК мы разберём, что такое пакеты в Go, как правильно организовывать структуру папок и работать с модулями.

❗️Вы получите знания о том, как избежать частых ошибок и эффективно использовать Go в реальных проектах.


🔴 Присоединяйтесь к открытому вебинару «Golang Developer. Basic»: https://vk.cc/cOAU6J

Реклама. ООО «Отус онлайн-образование», ОГРН 1177746618576, www.otus.ru
1
Швейцария в картах 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