Библиотека Go-разработчика | Golang
Все самое полезное для Go-разработчика в одном канале. Учиться у нас: clc.to/qaSdww По рекламе: @tproger_sales_bot Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a4a8c24689c2151c752af0 Заявка: 8137752389
Ko'proq ko'rsatish📈 Telegram kanali Библиотека Go-разработчика | Golang analitikasi
Библиотека Go-разработчика | Golang (@goproglib) Rus til segmentidagi kanali faol ishtirokchi. Hozirda hamjamiyat 24 067 obunachidan iborat bo'lib, Texnologiyalar & Aralashmalar toifasida 5 400-o'rinni va Rossiya mintaqasida 27 060-o'rinni egallagan.
📊 Auditoriya ko‘rsatkichlari va dinamika
невідомо sanasidan buyon loyiha tez o‘sib, 24 067 obunachiga ega bo‘ldi.
05 Oktabr, 2026 dagi oxirgi ma’lumotlarga ko‘ra kanal barqaror faollikka ega. Oxirgi 30 kunda obunachilar soni 8 ga, so‘nggi 24 soatda esa 4 ga o‘zgardi va umumiy qamrov yuqori darajada qolmoqda.
- Tasdiqlash holati: Tasdiqlanmagan
- Jalb etish (ER): Auditoriya o‘rtacha 16.23% darajada jalb etiladi. Nashrdan keyingi dastlabki 24 soatda kontent odatda umumiy obunachilar sonining 8.69% ini tashkil etuvchi reaksiyalarni to‘playdi.
- Post qamrovi: Har bir post o‘rtacha 3 906 marta ko‘riladi; birinchi sutkada odatda 2 091 ta ko‘rish yig‘iladi.
- Reaksiyalar va o‘zaro ta’sir: Auditoriya faol: har bir postga o‘rtacha 23 ta reaksiya keladi.
- Tematik yo‘nalishlar: Kontent навигация, лучшее_из_библиотеки_2025, git, string, golive kabi asosiy mavzularga jamlangan.
📝 Tavsif va kontent siyosati
Muallif resursni shaxsiy fikrni ifoda etish maydoni sifatida ta’riflaydi:
“Все самое полезное для Go-разработчика в одном канале.
Учиться у нас: clc.to/qaSdww
По рекламе: @tproger_sales_bot
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a4a8c24689c2151c752af0
Заявка: 8137752389”
Yuqori yangilanish chastotasi (oxirgi ma’lumot 06 Oktabr, 2026 da olingan) sababli kanal doimo dolzarb va katta qamrovli bo‘lib qoladi. Analitika auditoriya kontent bilan faol hamkorlik qilishini, uni Texnologiyalar & Aralashmalar toifasidagi muhim ta’sir nuqtasiga aylantirishini ko‘rsatadi.
Ma'lumot yuklanmoqda...
| Sana | Obunachilarni jalb qilish | Esdaliklar | Kanallar | |
| 06 Oktabr | +6 | |||
| 05 Oktabr | +6 | |||
| 04 Oktabr | +6 | |||
| 03 Oktabr | +3 | |||
| 02 Oktabr | +5 | |||
| 01 Oktabr | +4 |
| 2 | 🧑💻 Эмулятор AWS-сервисов
Kumo — это небольшой инструмент на Go для локальной имитации AWS-сервисов. Он помогает разработчикам тестировать приложения без облака.
Проект подходит для unit-тестов, где нужен мок для облачных вызовов. Устанавливается через go install github.com/sivchari/kumo@latest. Запускается как прокси, а SDK настраивается на локальный эндпоинт.
Поддерживает базовые операции над S3: создание бакетов, загрузку объектов, список файлов. Для DynamoDB эмулирует таблицы, put/get item. Конфиг через флаги или env.
➡️ Репозиторий
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoLive | 3 243 |
| 3 | 👨💻 Библиотека для написания LSP-серверов
Написать свой Language Server с нуля на Go сложно. Нужно разобраться с JSON-RPC фреймингом, маршрутизацией сообщений, типами LSP, управлением жизненным циклом соединения. И всё это до того, как начнёшь писать саму языковую логику.
go-lsp берёт всё это на себя. Библиотека реализует LSP 3.17 и даёт чистый интерфейс, где вы просто описываете, что ваш сервер умеет делать.
go-lsp состоит из трёх пакетов. jsonrpc отвечает за JSON-RPC 2.0 поверх io.ReadWriteCloser. lsp содержит Go-типы для всех структур протокола, без логики. server связывает всё вместе: принимает хендлер, смотрит какие интерфейсы он реализует и автоматически регистрирует соответствующие LSP-методы.
Устанавливаем:
go get github.com/owenrumney/go-lsp
Минимальный сервер с поддержкой hover:
package main
import (
"context"
"os"
"github.com/owenrumney/go-lsp/lsp"
"github.com/owenrumney/go-lsp/server"
)
type Handler struct{}
func (h *Handler) Initialize(ctx context.Context, params *lsp.InitializeParams) (*lsp.InitializeResult, error) {
return &lsp.InitializeResult{
Capabilities: lsp.ServerCapabilities{
HoverProvider: &lsp.HoverOptions{},
},
}, nil
}
func (h *Handler) Shutdown(ctx context.Context) error {
return nil
}
func (h *Handler) Hover(ctx context.Context, params *lsp.HoverParams) (*lsp.Hover, error) {
return &lsp.Hover{
Contents: lsp.MarkupContent{
Kind: lsp.MarkupKindMarkdown,
Value: "Hello from the server",
},
}, nil
}
func main() {
srv := server.NewServer(&Handler{})
if err := srv.Run(context.Background(), server.RunStdio()); err != nil {
os.Exit(1)
}
}
Сервер сам понимает, что хендлер поддерживает hover, потому что он реализует интерфейс HoverHandler. Вручную регистрировать методы не нужно. Хотите добавить completion — реализуйте CompletionHandler.
Обязательный интерфейс только один — LifecycleHandler с методами Initialize и Shutdown. Всё остальное реализуете по мере необходимости.
➡️ Репозиторий
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика | 2 609 |
| 4 | 🤔 Вопрос с собеседования по Go
Что выведет программа?
❤️ — 1 true / 0 false
🔥 — 1 true / 1 false
👍 — 1 false / 0 true
👾 — panic при втором чтении
👇 Правильный ответ (нажми, чтобы прочитать):
❤️ — 1 true / 0 false
После close(ch) уже записанное значение можно получить обычным чтением. Когда канал пуст и закрыт, чтение возвращает нулевое значение типа и ok == false.
⚠️ Закрытый канал не становится сразу «пустым» — его буфер всё ещё можно прочитать.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика | 2 914 |
| 5 | 👩💻 Что на самом деле происходит внутри Go map?
После Go 1.24 обычный map внутри работает уже не так, как раньше: вместо старой схемы с overflow buckets используется Swiss Tables.
И там довольно много интересного: хеш делится на части, поиск идёт группами по 8 слотов, SIMD сразу сравнивает несколько значений, а при росте таблица может дробиться.
📍 В статье всё это разбирают буквально по шагам — от m["cow"] = 4 до устройства directory и таблиц.
Если хочется понять, почему Go map работает быстро, а не просто знать, что он O(1) — почитать стоит.
🐸 Библиотека программиста | 2 863 |
| 6 | 🔥 В Go 1.27 появился portable SIMD
До этого SIMD-оптимизации в Go требовали архитектурного кода — например, отдельно для amd64 и arm64.
➡️ Теперь экспериментальный пакет simd предлагает единый интерфейс для разных CPU: AVX/AVX2/AVX512, NEON и Wasm SIMD. Размер вектора при этом не зашит в типы, а при отсутствии аппаратной поддержки операции могут выполняться через эмуляцию.
Пока API экспериментальный, но идея простая: один векторизованный код вместо отдельных реализаций под каждую архитектуру.
🔗 Подробнее о том, как это реализовано внутри Go
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoLive | 3 787 |
| 7 | 🤡🤡
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoGiggle | 3 988 |
| 8 | 💡 Код работает. А data race уже есть
В Go можно записать значение в одной горутине, прочитать в другой — и получить именно тот результат, который ожидал.
Проблема в том, что Go этого не гарантирует без синхронизации.
Например, даже такой паттерн:
msg = "hello"
done = true
for !done {}
fmt.Println(msg)
может выглядеть абсолютно логично, но содержит две data race.
🔜 В разборе наглядно показывают, почему так происходит: от работы компилятора и CPU до memory model Go. А затем — чем правильно заменить самодельный флаг:
atomic → Mutex → WaitGroup → channels → sync.Once
Отдельно разбирается интересный эксперимент, где две горутины иногда обе читают 0, хотя на первый взгляд это кажется невозможным.
Если с конкурентностью в Go приходится работать не только на уровне «поставь mutex», этот разбор стоит посмотреть.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика | 3 696 |
| 9 | 💥 TCP/IP: что происходит с данными в сети
Когда Go-приложение отправляет данные по сети, они проходят несколько уровней TCP/IP. Каждый отвечает за свою часть доставки.
1️⃣ Канальный
Отвечает за передачу данных внутри конкретной сети: Ethernet, Wi-Fi и т. д. Здесь работают MAC-адреса и механизмы доступа к среде.
2️⃣ Межсетевой
Здесь появляется IP — адресация и маршрутизация пакетов между сетями. Маршрутизаторы определяют, куда отправить пакет дальше.
3️⃣ Транспортный
Определяет, как данные доставляются между хостами. Основные протоколы:
TCP — соединение, порядок данных, подтверждения и повторная передача;
UDP — минимальные накладные расходы, без гарантии доставки и порядка.
4️⃣ Прикладной
Протоколы, с которыми непосредственно работают приложения: HTTP, DNS, SMTP, SSH и другие.
TCP vs UDP
У TCP заголовок сложнее: в нём есть sequence number, acknowledgement, window и другие поля, необходимые для управления передачей.
У UDP всё проще: порты, длина, checksum и данные.
В Go разницу особенно хорошо видно при работе с net.TCPConn и net.UDPConn.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика | 3 818 |
| 10 | 🔴 Встроенные функции
len, make, panic — встроенные функции Go, которые можно использовать без импорта пакетов.
❓ Но почему тогда len указана в документации builtin как:
func len(v Type) int
builtin — специальный пакет только для документации. Он не компилируется, а Type — условная заглушка для типа аргумента.
При этом built-in — не обычные функции. У них нет стандартных Go-типов: компилятор обрабатывает их вызовы особым образом.
🟡 Например, len(s) для среза может быть преобразован компилятором в получение длины из внутреннего представления среза. Для make, panic и других built-in механизм уже другой.
Поэтому никаких дженериков вроде len[T any](s []T) в исходном коде нет — built-in являются специальными конструкциями языка, а builtin лишь описывает их для документации.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика | 3 830 |
| 11 | +3 🤩 Go с нуля: серия базовых шпаргалок
Собрали путь от Hello, World! до goroutines, channels и context.
День 1 — синтаксис, модули и инструменты
День 2 — типы, функции, слайсы, map и ошибки
День 3 — интерфейсы, структуры, методы, указатели и композиция
День 4 — goroutines, channels, select, WaitGroup, Mutex и context
Некоторые формулировки в карточках упрощены для новичков: порядок map не гарантирован, поведение slice зависит от backing array, а WaitGroup и Mutex решают разные задачи.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика | 4 730 |
| 12 | 🤔 Вопрос с собеседования по Go
Что выведет программа?
❤️ — [1 2 3 4 5] / [1 2 10]
🔥 — [1 2 10 4 5] / [1 2 10]
👍 — [1 2 3 4 5] / [1 2 3]
👇 Правильный ответ (нажми, чтобы прочитать):
🔥 — [1 2 10 4 5] / [1 2 10]
b := a[:2] создаёт слайс, который использует тот же backing array, что и a.
У b остаётся capacity до конца исходного массива, поэтому append не выделяет новый массив, а записывает 10 в третий элемент.
В итоге изменяется и a:
[1 2 10 4 5]
[1 2 10]
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика | 4 327 |
| 13 | 🛠 Rune — open-source IDE и terminal multiplexer на Go
Rune объединяет IDE, терминал и AI-agent в одном приложении.
Что интересного:
• GPU-ускоренный интерфейс;
• native graphics: OpenGL на Linux и Metal на macOS;
• language intelligence из коробки;
• встроенный agent;
• терминалы, вкладки и окна в едином workspace;
• E2E-зашифрованная сеть между экземплярами Rune.
Без Electron — приложение использует нативный графический pipeline.
Установить:
curl -fsSL https://rune.build/install.sh | sh
🔗 GitHub
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoToProduction | 3 998 |
| 14 | 🤩 SQLite вместо отдельного брокера в Go
Watermill поддерживает SQLite Pub/Sub — сообщения передаются между publisher и subscriber через таблицы SQLite.
Что это даёт:
— не нужен Kafka, RabbitMQ или Redis;
— сообщения хранятся в SQLite-файле;
— данные переживают перезапуск приложения;
— удобно для небольших сервисов и локальной разработки.
🔴 Публикация:
publisher, err := wmsqlitemodernc.NewPublisher(
db,
wmsqlitemodernc.PublisherOptions{
InitializeSchema: true,
Logger: logger,
},
)
msg := message.NewMessage(
watermill.NewUUID(),
[]byte(`{"message":"Hello, world!"}`),
)
err = publisher.Publish("messages", msg)
Подключается как обычный Pub/Sub Watermill — при этом отдельный брокер не требуется.
⚠️ SQLite Pub/Sub всё ещё Beta: реализация стабильна, но недостаточно проверена в production. Для высоких нагрузок учитывайте ограничения SQLite.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика | 4 475 |
| 15 | ⚡️ Go 1.27 ускоряет небольшие аллокации
В Go 1.27 появился size-specialized memory allocation — специальные пути выделения памяти для небольших объектов.
Что изменилось:
— аллокации объектов размером менее 80 байт могут стать быстрее на 20–30%;
— в программах с большим количеством аллокаций общий прирост может достигать 1%;
— максимальный эффект ожидается для объектов на 16 и 24 байта.
🔴 Почему это работает?
Раньше runtime использовал общий путь mallocgc, которому нужно определить размер объекта, класс аллокации и дополнительные параметры.
🔴 Теперь для часто встречающихся размеров есть специализированные функции. Они заранее знают размер объекта и могут:
— быстрее очищать память;
— не вычислять класс аллокации повторно;
— эффективнее выполнять служебные операции;
— использовать более короткий fast path.
Особенно часто такие размеры встречаются у структур, интерфейсов, строк и слайсов.
🔗 Ничего менять в коде не нужно. Чтобы получить улучшения, достаточно пересобрать приложение с Go 1.27.
При необходимости эксперимент можно отключить:
```bash
GOEXPERIMENT=nosizespecializedmalloc
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoLive | 4 191 |
| 16 | 🛠 Напишите конфиг сами
viper — самая частая рекомендация для конфигурации в Go. Он умеет читать файлы, переменные окружения, удалённые источники и устанавливать дефолты. Звучит удобно, но на практике создаёт проблемы.
🔴 В чём проблема
Viper тянет большое дерево зависимостей. Методы GetString, GetInt и подобные не типизированы — значения возвращаются в рантайме без проверки на этапе компиляции. Ключи конфига разбросаны по коду как строковые литералы. При нетривиальном использовании поведение при слиянии и приоритетах конфигов требует чтения исходников.
🔴 Что использовать
Структура с тегами и yaml.NewDecoder:
type Config struct {
DatabaseURL string `yaml:"database_url"`
Kafka KafkaConfig `yaml:"kafka"`
Server ServerConfig `yaml:"server"`
}
func Load(path string) (*Config, error) {
f, err := os.Open(path)
if err != nil {
return nil, err
}
defer f.Close()
var cfg Config
if err := yaml.NewDecoder(f).Decode(&cfg); err != nil {
return nil, err
}
return &cfg, nil
}
Переменные окружения добавляются вручную через os.Getenv там, где это нужно.
🔴 Что получаем
Полностью типизированный конфиг. Никаких строковых ключей. Граф зависимостей, который можно проверить за секунды. Код, который вы полностью контролируете.
Для JSON-конфига подход тот же, только с encoding/json. Пакет gopkg.in/yaml.v3 — единственная внешняя зависимость, и та минимальная.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoToProduction | 3 964 |
| 17 | 🔴 Тестовый собес с Go Senior с опытом работы в Ozon, ex. Ситидрайв в этот четверг
[+ разбор 50 сложных вопросов в подарок ]
17 сентября (в этот четверг!) в 19:00 по МСК приходи онлайн, чтобы посмотреть на настоящее интервью на Middle Go-разработчика!
Собеседование проведёт Даниил Динько - Senior Backend Engineer, ex. TechLead tier-3 world cybercrime, ex. Senior Go в Ozon, ex. Ситидрайв.
Как это будет:
📂 Даниил задаст разработчику вопросы и задачи, которые могут спросить на реальном собесе;
📂 После каждого ответа респондента ты услышишь подробный комментарий от ментора и поймёшь, чего на самом деле ожидает собеседующий на интервью;
📂 В конце сможешь задать любой вопрос Даниилу и получить на него развёрнутый ответ;
Эфир проходит в рамках менторской программы от ШОРТКАТ для Go-разработчиков, которые хотят повысить свой грейд, ЗП и прокачать скиллы.
И ты можешь посмотреть его бесплатно 🔥
Только завтра, в прямом эфире!
🎁 Подарок для всех, кто зарегается на веб — файл с ОТВЕТАМИ НА 50 СЛОЖНЫХ ВОПРОСОВ с Go-собеседований 🔥
Переходи в бот, чтобы попасть на эфир и забрать подарок 👉 @shortcut_go_bot
Реклама.
О рекламодателе. | 2 561 |
| 18 | 🔥 Шейдеры на Go: как оживить игру с помощью кода
В Ebitengine шейдеры пишутся на Kage — языке с Go-подобным синтаксисом. С их помощью можно создавать эффекты прямо на уровне пикселей:
— маска повреждений зданий;
— «дрожащий» рукописный текст;
— ретро-CRT и глитчи;
— зацикленная анимация текстур;
— эффект строительства зданий.
➡️ В статье — практические примеры из игр Roboden и Decipherism, а также разбор Fragment(), текстур, uniform-параметров и DrawRectShader().
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoToProduction | 4 104 |
| 19 | 😭 Как не потратить недельный лимит AI-кодинга за три дня?
Разберём на вебинаре, как тратить меньше на AI-агентов — без потери качества кода.
🔘 Поговорим о том:
— когда дорогая модель действительно нужна, а когда хватит дешёвой;
— сколько стоит один прогон и куда уходят токены;
— какие задачи можно отдавать субагентам;
— как настроить маршрутизацию моделей;
— что проверять в AI-коде перед merge.
✏️ Покажем всё на конкретных цифрах и вживую: сравним расходы до и после.
⬇️ 18 сентября, 19:00 МСК
⬇️ 1,5 часа · бесплатно
⬇️ Арсений Харланов и Олег Лайок
💬 Пишите в комментариях, где упираетесь в лимиты и на что уходят деньги. Самые залайканные вопросы разберём на вебинаре.
🔗 Зарегистрироваться на вебинар | 3 981 |
| 20 | 📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика | 3 694 |
