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

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

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

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

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
🛠 Как использовать новую директиву tool

До Go 1.24, чтобы «закрепить» зависимости на CLI-инструменты, разработчики использовали такой хак:
// tools.go
//go:build tools

package tools

import (
_ "github.com/golang/mock/mockgen"
)


Теперь всё намного проще

1. Добавьте инструмент в go.mod:
go get tool github.com/golang/mock/mockgen@v1.6.0


2. Это создаст запись:
tool github.com/golang/mock/mockgen v1.6.0


Инструмент не будет включён в go build — он «за кадром», только как зависимость для разработки.

Важно:

• tool не устанавливает инструмент — он лишь фиксирует его как зависимость.
• Команда go mod tidy не удаляет такие записи.
• Отлично подходит для корпоративных и командных проектов, где важна единая версия

🐸Библиотека Go разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔄 go-size-analyzer v1.9.0

Инструмент для анализа размера скомпилированных Go-бинарников, go-size-analyzer, получил обновление, включающее экспериментальную поддержку WebAssembly и улучшения в стабильности.

Теперь можно анализировать файлы WebAssembly, сгенерированные с помощью go gc. На данный момент реализован только анализатор pclntab; поддержка анализаторов symbol и dwarf пока отсутствует.

➡️ Почитать о релизе

🐸Библиотека Go разработчика #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
📋 Чек-лист по синтаксису Go

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

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

Основы синтаксиса

• Используется правильный package — каждый файл начинается с корректного определения пакета
• Импорты сгруппированы и отсортированы (стандартная библиотека, внешние пакеты, внутренние)
• Константы и переменные объявлены с типами, где это необходимо (var и const)
• Используется короткое объявление переменных := в локальной области

Функции и методы

• Функции имеют четкие и понятные имена (глаголы для действий)
• Используется явный возврат значений (не прячем error)
• Обработка ошибок — всегда проверяется if err != nil
• Используются именованные возвращаемые значения для улучшения читаемости (по необходимости).
• Методы объявлены с указателем *Type для изменения состояния (если нужно).

Циклы и условия

• Циклы for написаны лаконично и с понятной логикой (без лишних вложенностей).
• Используется switch вместо цепочек if-else там, где это уместно.
• В условных выражениях нет лишних скобок — Go этого не требует.

Структуры и интерфейсы

• Структуры и интерфейсы объявлены с понятными именами.
• Используются теги для JSON, если структура используется для сериализации (json:"fieldName").
• Методы интерфейса определены минимально и по назначению.
• Композиция структур вместо наследования, где это возможно.

Работа с ошибками

• Ошибки возвращаются явно из функций (return err).
• Используются кастомные типы ошибок или fmt.Errorf с %w для обёртки ошибок.
• Важные ошибки логируются или обрабатываются на уровне вызова.

Чистота кода и стиль

• Форматирование соответствует gofmt / goimports.
• Лишние комментарии и неиспользуемые переменные удалены.
• Функции не слишком длинные — каждая отвечает за одну задачу.
• Использование defer для освобождения ресурсов и закрытия файлов/соединений.
• Нет глобальных переменных, если это можно избежать.

Работа с пакетами

• Пакеты не слишком большие, разделены по функционалу.
• Используются правильные уровни видимости: экспортируемые (с большой буквы) и неэкспортируемые элементы.
• Пакеты имеют README с описанием назначения (по возможности).

Оптимизация и производительность

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

Документация

• Публичные функции, типы и пакеты имеют комментарии в формате GoDoc.
• Документы объясняют назначение и использование, а не только перефразируют имена функций.

🐸Библиотека Go разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🚨 Смешные новости про IT теперь в одном канале

Мы запустили @hahacker_news — наш новый юмористический IT-канал.

Туда будем постить лучшие шутки до 19го мая, которые вы присылали на конкурс.

👉 @hahacker_news — голосование уже идёт, переходите, читайте, угарайте и оставляйте реакции
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🧑‍💻 Расслабление и концентрация на коде

Zen Mode — это специальный режим работы в GoLand, который минимизирует визуальные отвлекающие элементы и позволяет полностью сосредоточиться на написании кода.

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

Как его включить

1. Вызовите Find Action — Ctrl+Shift+A
2. Введите в поиске команду «Zen Mode».
3. Активируйте её — интерфейс перейдёт в минималистичный вид.

Как работать без вкладок

• Используйте Navigation Bar (включается через Alt+Home или по команде) — это компактная строка навигации по проекту и файлам.

• Воспользуйтесь поиском файлов (Ctrl+Shift+N / Cmd+Shift+O) для быстрого открытия нужного файла.

• Используйте быстрые переходы, чтобы переключаться между последними файлами.

Важно освоить эффективные методы навигации, чтобы компенсировать отсутствие привычных элементов интерфейса.

🐸Библиотека Go разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
⚙️ Простыми словами о планировщике

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

В основе работы планировщика лежит модель GMP — связка из горутины (G), потока ОС (M) и абстракции процессора (P). Именно она позволяет Go удерживать баланс между легковесностью и управляемостью.

Чтобы понять, как Go так эффективно распределяет задачи, нужно заглянуть под капот его механизма выполнения.

➡️ Подробнее про работу планировщика

🐸Библиотека Go разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🎮 Что мы загадали в ребусе

Попробуйте отгадать слово из go в комментариях 👇

P.S. Слова на английском языке

🐸Библиотека Go разработчика #междусобойчик
Please open Telegram to view this post
VIEW IN TELEGRAM
📰 Дайджест недели

Без лишнего: мы собрали для вас только лучшее

Свежий выпуск подкаста Cup o' Go
Обсуждение ухода Иэна Лэнса Тейлора из команды Go и беседа с Кевином Хоффманом из SparkLogs, который делится своими взглядами на важность эмпатии в разработке и находит радость в процессе логирования.

Интеграция PostgreSQL в Go
Описывается использование драйвера pgx с пулом подключений, управление миграциями с помощью инструмента tern, организацию кода через паттерн репозиториев и настройку среды разработки с использованием Makefile и Docker.

Грин-флаги в вакансиях: 10 признаков хорошего работодателя

go-sandbox
Веб-инструмент, предоставляющий опыт разработки на Go, приближенный к полноценной IDE.

go-size-analyzer v1.9.0

goimapnotify 2.5
Вышла новая версия утилиты goimapnotify — IMAP IDLE-клиента на Go, позволяющего выполнять скрипты при изменениях в почтовом ящике.

В обновлении добавлена поддержка команды IMAP ID и шаблонов в конфигурации, а также улучшена обработка нестандартных ответов серверов.

Смешные новости про IT теперь в одном канале

🐸Библиотека Go-разработчика #свежак
Please open Telegram to view this post
VIEW IN TELEGRAM
🐰 Топ-вакансий для Go-разработчиков за неделю

Senior Golang-разработчик — от 300 000 ₽, Офис (Москва)

Golang Developer — от 210 000 ₽, Удаленно/Офис (Питер)

Golang наставник — от 350 000 ₽, Гибрид/Офис (Воронеж)

Hotel Search Team Lead — от 6 400 $, Удаленно

Бустер — удалённо (не только Москва)

➡️ Еще больше топовых вакансий — в нашем канале Go jobs
Please open Telegram to view this post
VIEW IN TELEGRAM
🌐 Шпаргалка по ключевым сетевым протоколам и их взаимосвязям

Подготовили для вас наглядную схему, которая визуально покажет взаимодействие протоколов.

Краткие пояснения по схеме:

• IPv4 / IPv6 — сетевые протоколы, определяющие, как устройства находят друг друга в интернете

• ICMP / ICMPv6 — диагностика и контроль (например, команды ping, traceroute)

• TCP / UDP / SCTP / DCCP — транспортные протоколы

• IPSec — безопасность на уровне IP (шифрование, проверка подлинности)

На основе UDP работают:

• DNS — доменные имена
• DHCP — выдача IP-адресов
• SIP — VoIP телефония
• NTP — синхронизация времени
• RIP / RPT — маршрутизация
• QUIC — альтернатива TCP от Google, работает поверх UDP

На основе TCP:

• HTTP / HTTPS — веб-протокол
• SSL/TLS — безопасное соединение
• SSH — защищённый удалённый доступ
• POP / IMAP — получение почты
• RDP / VNC — удалённый рабочий стол
• BGP — обмен маршрутами между провайдерами

💬 На какие темы вы бы хотели увидеть шпаргалки? Напишите свои варианты в комментарии 👇

🐸Библиотека Go-разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🔠 Команда Go рассказала о выявленных уязвимостях в криптобиблиотеке

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

Также выявили места с возможными рисками тайминговых атак из-за недостаточно защищённых операций.

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

➡️ Блог команды разработки Go

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

Bluemonday — это инструмент для очистки HTML-контента. Его главная задача — защитить веб-приложения от атак типа Cross-Site Scripting (XSS), удаляя из пользовательского ввода потенциально опасные теги и атрибуты.

Bluemonday использует политики на основе allowlist, позволяя контролировать, какие элементы остаются в HTML, а какие — удаляются.

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

Инструмент интегрируется в Go-проекты и поддерживает разные форматы ввода, от строк до потоков.

Чтобы избежать уязвимостей, важно применять инструмент на последнем этапе обработки и с осторожностью настраивать политики.

Пример очистки пользовательского контента с помощью стандартной политики UGC:
import (
"fmt"
"github.com/microcosm-cc/bluemonday"
)

func main() {
p := bluemonday.UGCPolicy() // Политика для пользовательского контента
dirtyHTML := `<a href="http://example.com" onclick="alert('XSS')">Ссылка</a><script>alert('bad')</script>`
cleanHTML := p.Sanitize(dirtyHTML)
fmt.Println(cleanHTML)
}


Результат:
<a href="http://example.com" rel="nofollow">Ссылка</a>

Вредоносный <script> и атрибут onclick удалены, добавлен rel="nofollow" для безопасности.

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

📎 Репозиторий проекта

🐸Библиотека Go-разработчика #буст
Please open Telegram to view this post
VIEW IN TELEGRAM
🥵 Устали от статей, где эйчары рассказывают, как на самом деле выглядит рынок труда в ИТ?

Мы тоже! Поэтому решили узнать правду и представить ее всем айтишникам — но нам нужен ваш голос. Опрос займет 3 минуты, а пользы — вагон для всего сообщества.

Результаты этого исследования помогут понять, как специалистам искать работу в 2025-м (а компаниям — специалистов).

👉 Если вы готовы сделать свой вклад в исследование — велком: https://clc.to/VGgyNA