🔥 Go Maps Explained: Как на самом деле хранятся пары ключ-значение
Go
Ключевые моменты:
Неупорядоченность
Go не гарантирует порядок обхода элементов в
Zero value
Нулевое значение для
Удаление элементов
Удаление производится функцией
Проверка существования ключа
При чтении из карты можно использовать «двухзначную» форму:
где
Память и рост
Go автоматически увеличивает ёмкость карты при необходимости, но уменьшения после удаления большого числа элементов не происходит — память будет удерживаться до освобождения карты целиком.
Конкурентный доступ
Карты в Go не потокобезопасны. Параллельная запись и чтение могут привести к панике. Для защиты используют
👉 Читать
👉 @golang_lib
Go
map
— это встроенный тип данных, который реализует хеш-таблицу для хранения пар ключ–значение. В статье рассматриваются важные детали работы map
в Go, которые часто упускают из виду, и даются практические рекомендации по их использованию.Ключевые моменты:
Неупорядоченность
Go не гарантирует порядок обхода элементов в
map
. Если нужен определённый порядок, нужно использовать срез для сортировки ключей перед обходом.Zero value
Нулевое значение для
map
— nil
. Обращение к неинициализированной карте для чтения безопасно и вернёт нулевое значение для типа, но запись в неё приведёт к панике. Создавать карту можно через make()
или литерал.Удаление элементов
Удаление производится функцией
delete(m, key)
. Если ключа нет — операция безопасна, ошибок не будет.Проверка существования ключа
При чтении из карты можно использовать «двухзначную» форму:
value, ok := m[key]
где
ok
— булево значение, указывающее на наличие ключа.Память и рост
Go автоматически увеличивает ёмкость карты при необходимости, но уменьшения после удаления большого числа элементов не происходит — память будет удерживаться до освобождения карты целиком.
Конкурентный доступ
Карты в Go не потокобезопасны. Параллельная запись и чтение могут привести к панике. Для защиты используют
sync.Mutex
или sync.Map
.👉 Читать
👉 @golang_lib
👍2
Яндекс создаёт продукты и сервисы для миллионов пользователей. Нейросетевой поиск, умные устройства, машинный перевод — задачи, где нет готовых решений.
Поэтому нам нужны сильные бэкенд-разработчики! Если у вас от 5 лет опыта на C++, Python, Java или Go — участвуйте в Мультитреке.
Как это работает
• Подаёте заявку до 18 августа
• Проходите технические секции 23 и 24 августа
• Получаете офер 24 августа
После найма мы предложим поработать в трёх командах несколько недель. Будет время погрузиться в работу, прочувствовать атмосферу и выбрать проект, который вам больше подходит.
Узнайте подробности и оставьте заявку.
Поэтому нам нужны сильные бэкенд-разработчики! Если у вас от 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
Добро пожаловать в 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
Это минималистичный, независимый от платформ порт легендарного движка 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
➡️ На открытом уроке 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
Golang продолжает развиваться. Изначальные проектные решения ставятся под сомнения, а новые вызовы заставляют язык меняться: дженерики, итераторы, новая имплементация мап. Однако, даже нововведения приходят к нам не такими, как в других языках. Вспомните обсуждения сразу после релиза тех же дженериков. На Go, как мне кажется, в большинстве своём пишут люди, пришедшие из прочих языков, у кого Golang не первый ЯП. Они привыкли к другому подходу работы с абстракциями. И им порой не хватает того, что предлагает язык Гофера. Swiss Tables — попытка быть в тренде.
С вами Кирилл Кузин — ведущий подкастов про IT на канале gIT, где вместе с коллегами по цеху рассматриваем индустрию под разными углами, открывая новые горизонты для вас и самих себя. А работаю ведущим разработчиком в Ви.Tech — IT-дочке ВсеИнструменты.ру. Там мы с командой пишем внутренние системы на Go под задачи бизнеса и по ходу дела разбираемся, как наши инструменты устроены и как реально влияют на процесс разработки.
В этой статье речь пойдёт о новых мапах в версии Go 1.24, реализованных по принципу Swiss Tables — швейцарских таблиц. Попробуем найти ответы на вопросы о том, почему мапы изменились, что лежит в основе новой реализации и как к ней пришли.
👉 Читать
👉 @golang_lib
👍1