Библиотека Go-разработчика | Golang
23.3K subscribers
2.07K photos
42 videos
87 files
4.44K links
Все самое полезное для Go-разработчика в одном канале.

По рекламе: @proglib_adv

Учиться у нас: https://proglib.io/w/32d20779

Для обратной связи: @proglibrary_feeedback_bot

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
⚙️ Как получить более точные результаты тестирования

Использование стандартного подхода с b.N для тестирования производительности может быть полезным, но это не дает самых точных результатов. Для этого лучше использовать новый метод testing.B.Loop для улучшения точности бенчмарков.

В традиционном методе бенчмарков в Go, цикле от 0 до b.N, вы тестируете функцию или метод, который повторяется b.N раз.

Однако, при таком подходе могут возникнуть несколько проблем:

В некоторых случаях компилятор может удалить неиспользуемые переменные или оптимизировать код, если он считает, что результат не влияет на конечный результат.

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

Код теста может зависеть от количества итераций или состояния текущей итерации, что вносит дополнительные вариации в результаты.

Пример использования testing.B.Loop:
func BenchmarkMyFunction(b *testing.B) {
for b.Loop() {
// Код, производительность которого необходимо измерить
}
}


Рекомендуется использовать b.Loop в любом новом бенчмарке, так как это позволяет вам избежать ряда потенциальных проблем с точностью тестирования и оптимизацией.

➡️ Подробности в блоге Go

🐸Библиотека Go разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍172
🔥 Программисты, нужен ваш совет!

Пилим крутую подборку ноутов для кодеров в 2025-м и хотим собрать реальный фидбек от тех, кто в теме!

Какой ноут спасает вас в кодинге и почему?

Расскажите все:

• Что за зверь (модель, начинка)
• Где жмет и где радует в ежедневной работе
• На какие фишки смотреть при выборе
• Как вам с ним живется

Топовые советы попадут в нашу статью!

💬 Делитесь в комментах 👇 Сделаем годный гайд, который реально поможет коллегам!

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
👀 ORM или SQL руками

Когда дело доходит до доступа к базе данных, мир делится на два лагеря:

Сторонники ORM говорят:

• Писать SQL — это прошлый век. Зачем самому лезть в кишки, если можно красиво и декларативно?

• GORM, Ent, XORM — всё уже придумано. Ассоциации, миграции, preloading, всё есть.

• Быстро собрать MVP? ORM — твой друг. CRUD за 5 минут, остальное — потом.

SQL руками — философия настоящего разработчика:

• Хочется понять, что реально происходит? Тогда нужно писать руками.

• Полный контроль над запросами, никакой магии, всё читается чётко.

• Оптимизация, читаемость, отладка — всё проще, когда ты не в плену ORM-абстракций.

💬 А на чём строите своё DAO-королевство вы? GORM, sqlx, Ent или database/sql на самописных запросах? Ждём вас в комментариях 👇

🐸Библиотека Go разработчика #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
😁82👍2🥱2
🔍 Поиск по структуре в GoLand

Structural Search and Replace — это как Ctrl+F, только с пониманием структуры кода, а не просто текста.

Как его использовать
Ctrl + Shift + A → Replace Structurally


Например, хочется заменить все log.Println на zap.S().Info

По шаблону найдём все вызовы:
log.Println($msg$)


И заменим их на:
zap.S().Info($msg$)


Все вызываемые методы изменятся, а сообщение останется тем же.

Ещё один простой пример по поиску всех функций, в которые передаётся один аргумент int:
func $name$($arg$: int) { $body$ }


🐸Библиотека Go разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍22🌚3🔥2😁21
🎧 104 выпуск подкаста Cup o' Go

Не пропустите новый эпизод подкаста Cup o' Go, где ведущие как всегда анализируют самые важные новости и обновления в мире Go.

Что обсудили на этот раз:

Уязвимость в пакете x/net: ошибка парсинга HTML, связанная с некорректной интерпретацией тегов с незакавыченными атрибутами, заканчивающимися символом слэша.

• «IngressNightmare»: критическая уязвимость в Ingress NGINX, позволяющая неаутентифицированное удаленное выполнение кода.

• Добавление команды go mod verify -tag

🖇 Слушать обсуждение новостей

🐸Библиотека Go разработчика #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🔒 Go 1.24.2 и 1.23.8 — важные патчи безопасности

Выпущены свежие минорные версии Go, что поправили:

• Закрыта уязвимость в net/http (CVE-2025-22871): http принимал некорректные chunked-запросы, заканчивающиеся только \n вместо \r\n

• Фикс "out of memory" в компиляторе

• Улучшена работа с cgo и профилировщиками

🐸Библиотека Go разработчика #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18
✏️ Готовы ли вы к собеседованию

Если вы работаете с языком Go и уверены в своих знаниях — самое время это проверить.

Это мини-экзамен перед собеседованием: синтаксис, тонкости работы с горутинами, ошибки, которые делают даже опытные разработчики.

➡️ Проверить свои знания

🐸Библиотека Go разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚12
🎲 Go-квест: разгадай кроссворд

Если вы осваиваете язык Go или просто хотите повторить базовые понятия — этот кроссворд для вас.

1. Как называется легковесный поток выполнения в Go, создаваемый с помощью ключевого слова go?

2. Какое ключевое слово в Go используется для отложенного выполнения функции до выхода из окружающей функции?

3. Какой механизм синхронизации используется в Go для блокировки доступа к разделяемым ресурсам?

4. Какой оператор в Go позволяет обрабатывать несколько каналов одновременно?

5. Как в Go называется структура данных, представляющая собой динамический массив?

6. Какой пакет в Go используется для управления временем жизни горутин и отмены операций?

💬 Пишите ответы под спойлер в комментарии 👇

🐸Библиотека Go разработчика #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
👾7👍4😁3🥱2
☕️ Дайджест недели: после первой чашки кофе

Коротко и по делу: собрали для вас новости из мира Go.

Тестирование с b.loop

Написано на Go: GitHub выпускает MCP-сервер для интеграции с API

Revive v1.8.0

Новый эпизод подкаста Cup o' Go

Минорные патчи безопасности Go

Поучаствуйте в нашей подборке ноутов

Проверьте свои знания Go

🐸Библиотека Go разработчика #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Как работает затенение

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

var x int = 10 // глобальная переменная

func main() {
x := 20 // локальная переменная, затеняющая глобальную
fmt.Println(x) // Выведет 20, потому что локальная переменная затеняет глобальную
}


🐸Библиотека Go для собеса
Please open Telegram to view this post
VIEW IN TELEGRAM
👍23
Что произойдёт, если вы используете goto для перехода из одной функции в другую

👻 — Это приведёт к ошибке компиляции, так как goto работает только внутри одной функции.
🌚 — Это возможно, но только если функции находятся в одном пакете.
⚡️ — Это приводит к стековому переполнению, так как переход между функциями дорогостоящий.
🎉goto разрешает переход между функциями, но лучше использовать обычные вызовы функций.

🐸Библиотека задач по Go
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉52👏3👍2👾2
🖥 Метрики эффективности сотрудника

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

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

Иногда стоит пересмотреть, как мы оцениваем эффективность. Потому что не все цифры отражают суть.

🔗 Подробности в статье

🐸 Библиотека джависта
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍91
💡 Go-кэш за 5 минут

🔧 Установка
go get github.com/patrickmn/go-cache


🚀 Быстрый пример
c := cache.New(5*time.Minute, 10*time.Minute)
c.Set("foo", "bar", cache.DefaultExpiration)

val, found := c.Get("foo")
if found {
fmt.Println("Found:", val)
}

• 5m — TTL по умолчанию для всех ключей
• 10m — интервал очистки просроченных ключей
• можно указать cache.NoExpiration — чтобы хранить вечно

🛠 Полезные методы
// Установить с TTL
c.Set("key", "value", time.Minute)
// Получить значение
c.Get("key")
// Удалить ключ
c.Delete("key")
// Очистить всё
c.Flush()


💬 Какой либой для кэша пользуетесь вы? Делитесь в комментариях👇

🐸Библиотека Go разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
1🔥13👍7🤔5
Гоферы!

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

➡️Поддержать канал: https://t.iss.one/boost/goproglib
Please open Telegram to view this post
VIEW IN TELEGRAM
3🥱15😢21🔥1
🤦‍♂️ Я забил на споры о микросервисах с архитекторами, и вот почему

С момента появления концепции микросервисов прошло уже несколько лет. За это время появилось много споров о её эффективности.

Зачем спорить о микросервисах, если можно просто посмотреть на факты? Давайте разберёмся, что действительно важно

➡️ Читать статью

💬 Как вы относитесь к микросервисам? Использовали ли вы их в своих проектах? Ждём ваши комментарии 👇

🐸Библиотека devops'a
Please open Telegram to view this post
VIEW IN TELEGRAM
👍8🥱6🌚1
⚙️ Меньше команд — больше кода

lazygit — это удобный и понятный интерфейс для работы с Git прямо в терминале. Настоящая находка для тех, кто ценит скорость и наглядность.

Решение конфликтов, переключение веток, работа с stash, выполнение rebase или amend — всё это становится проще, потому что действия визуализированы.

➡️ Репозиторий ленивого гита

🐸Библиотека Go разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🤩82👍2🎉1
🌐 Чек-лист: как искать работу

Чтобы не застрять в вечной отладке своей карьеры, держим в голове (и перед глазами) понятный план. Вот чек-лист на период поиска:

Обновите резюме и профиль (и да, Go-модули на GitHub — тоже)

Покажите, что у вас не только есть опыт, но и Golang под капотом:
• актуальные технологии (Go 1.20+, gRPC, PostgreSQL, Redis, Kafka, Docker и пр.).
• внятные результаты («снизил время отклика API на 40%», а не «делал API»).
• ссылки на GitHub с чистыми, рабочими проектами (а не репо «test123» с одним файлом main.go).

Сформулируйте ключевые навыки и корректные поисковые запросы.

Рекрутеры — не экстрасенсы. Упростите им жизнь и напишите в резюме: Gin, Echo, Fiber, REST/gRPC, PostgreSQL, Redis, Kafka, RabbitMQ, CI/CD, Kubernetes.
Даже если вы фанат net/http — упомяните это тоже.

Следите за вакансиями регулярно, но без стресса

• Настройте уведомления на LinkedIn, Habr Career, hh.
• Подпишитесь на каналы с вакансиями, например, наш канал с вакансиями для трушных go-разработчиков.

Готовьтесь к собеседованиям заранее

• Освежите основы: goroutines, channels, context, interfaces, error handling.
• Разберитесь с нюансами работы garbage collector, конкурентного доступа и профилирования.
• Подготовьте истории про то, как вы спасали прод — но без «встал и всё заработало».

💬 Сколько в среднем ищете работу? Пару дней или пару месяцев? Пишите в комментарии👇

🐸Библиотека Go разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
👍134🔥1