Библиотека Go-разработчика | Golang
Все самое полезное для Go-разработчика в одном канале. Учиться у нас: clc.to/qaSdww По рекламе: @tproger_sales_bot Для обратной связи: @proglibrary_feeedback_bot РКН: https://gosuslugi.ru/snet/67a4a8c24689c2151c752af0 Заявка: 8137752389
نمایش بیشتر📈 تحلیل کانال تلگرام Библиотека Go-разработчика | Golang
کانال Библиотека Go-разработчика | Golang (@goproglib) در بخش زبانی روسی بازیگری فعال است. در حال حاضر جامعه شامل 24 067 مشترک است و جایگاه 5 400 را در دسته فناوری و برنامهها و رتبه 27 060 را در منطقه روسيا دارد.
📊 شاخصهای مخاطب و پویایی
از زمان ایجاد در невідомо، پروژه رشد سریعی داشته و 24 067 مشترک جذب کرده است.
بر اساس آخرین دادهها در تاریخ 05 اکتبر, 2026، کانال فعالیت پایداری دارد. در ۳۰ روز گذشته تغییر اعضا برابر 8 و در ۲۴ ساعت گذشته برابر 4 بوده و همچنان دسترسی گستردهای حفظ شده است.
- وضعیت تأیید: تأیید نشده
- نرخ تعامل (ER): میانگین تعامل مخاطب 16.23% است و در ۲۴ ساعت نخست پس از انتشار، محتوا معمولاً 8.69% واکنش نسبت به کل مشترکان کسب میکند.
- دسترسی پستها: هر پست به طور میانگین 3 906 بازدید دریافت میکند. در اولین روز معمولاً 2 091 بازدید جمعآوری میشود.
- واکنشها و تعامل: مخاطبان بهطور فعال حمایت میکنند؛ میانگین واکنش به هر پست 23 است.
- علایق موضوعی: محتوا بر موضوعات کلیدی مانند навигация, лучшее_из_библиотеки_2025, git, string, golive تمرکز دارد.
📝 توضیح و سیاست محتوایی
نویسنده این فضا را محل بیان دیدگاههای شخصی توصیف میکند:
“Все самое полезное для Go-разработчика в одном канале.
Учиться у нас: clc.to/qaSdww
По рекламе: @tproger_sales_bot
Для обратной связи: @proglibrary_feeedback_bot
РКН: https://gosuslugi.ru/snet/67a4a8c24689c2151c752af0
Заявка: 8137752389”
به لطف بهروزرسانیهای پرتکرار (آخرین داده در تاریخ 06 اکتبر, 2026)، کانال همواره بهروز و دارای دسترسی بالاست. تحلیلها نشان میدهد مخاطبان بهطور فعال با محتوا تعامل دارند و آن را به نقطه اثرگذاری مهم در دسته فناوری و برنامهها تبدیل کردهاند.
در حال بارگیری داده...
| تاریخ | رشد مشترکین | اشارات | کانالها | |
| 06 اکتبر | +2 | |||
| 05 اکتبر | +6 | |||
| 04 اکتبر | +6 | |||
| 03 اکتبر | +3 | |||
| 02 اکتبر | +5 | |||
| 01 اکتبر | +4 |
Проект подходит для unit-тестов, где нужен мок для облачных вызовов. Устанавливается через go install github.com/sivchari/kumo@latest. Запускается как прокси, а SDK настраивается на локальный эндпоинт.Поддерживает базовые операции над S3: создание бакетов, загрузку объектов, список файлов. Для DynamoDB эмулирует таблицы, put/get item. Конфиг через флаги или env. ➡️ Репозиторий 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика #GoLive
| 2 | 👨💻 Библиотека для написания 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 |
| 3 | 🤔 Вопрос с собеседования по Go
Что выведет программа?
❤️ — 1 true / 0 false
🔥 — 1 true / 1 false
👍 — 1 false / 0 true
👾 — panic при втором чтении
👇 Правильный ответ (нажми, чтобы прочитать):
❤️ — 1 true / 0 false
После close(ch) уже записанное значение можно получить обычным чтением. Когда канал пуст и закрыт, чтение возвращает нулевое значение типа и ok == false.
⚠️ Закрытый канал не становится сразу «пустым» — его буфер всё ещё можно прочитать.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика | 2 860 |
| 4 | 👩💻 Что на самом деле происходит внутри Go map?
После Go 1.24 обычный map внутри работает уже не так, как раньше: вместо старой схемы с overflow buckets используется Swiss Tables.
И там довольно много интересного: хеш делится на части, поиск идёт группами по 8 слотов, SIMD сразу сравнивает несколько значений, а при росте таблица может дробиться.
📍 В статье всё это разбирают буквально по шагам — от m["cow"] = 4 до устройства directory и таблиц.
Если хочется понять, почему Go map работает быстро, а не просто знать, что он O(1) — почитать стоит.
🐸 Библиотека программиста | 2 863 |
| 5 | 🔥 В Go 1.27 появился portable SIMD
До этого SIMD-оптимизации в Go требовали архитектурного кода — например, отдельно для amd64 и arm64.
➡️ Теперь экспериментальный пакет simd предлагает единый интерфейс для разных CPU: AVX/AVX2/AVX512, NEON и Wasm SIMD. Размер вектора при этом не зашит в типы, а при отсутствии аппаратной поддержки операции могут выполняться через эмуляцию.
Пока API экспериментальный, но идея простая: один векторизованный код вместо отдельных реализаций под каждую архитектуру.
🔗 Подробнее о том, как это реализовано внутри Go
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoLive | 3 787 |
| 6 | 🤡🤡
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoGiggle | 3 914 |
| 7 | 💡 Код работает. А 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 |
| 8 | 💥 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 |
| 9 | 🔴 Встроенные функции
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 |
| 10 | +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 |
| 11 | 🤔 Вопрос с собеседования по 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 |
| 12 | 🛠 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 |
| 13 | 🤩 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 |
| 14 | ⚡️ 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 |
| 15 | 🛠 Напишите конфиг сами
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 |
| 16 | 🔴 Тестовый собес с 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 |
| 17 | 🔥 Шейдеры на Go: как оживить игру с помощью кода
В Ebitengine шейдеры пишутся на Kage — языке с Go-подобным синтаксисом. С их помощью можно создавать эффекты прямо на уровне пикселей:
— маска повреждений зданий;
— «дрожащий» рукописный текст;
— ретро-CRT и глитчи;
— зацикленная анимация текстур;
— эффект строительства зданий.
➡️ В статье — практические примеры из игр Roboden и Decipherism, а также разбор Fragment(), текстур, uniform-параметров и DrawRectShader().
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoToProduction | 4 104 |
| 18 | 😭 Как не потратить недельный лимит AI-кодинга за три дня?
Разберём на вебинаре, как тратить меньше на AI-агентов — без потери качества кода.
🔘 Поговорим о том:
— когда дорогая модель действительно нужна, а когда хватит дешёвой;
— сколько стоит один прогон и куда уходят токены;
— какие задачи можно отдавать субагентам;
— как настроить маршрутизацию моделей;
— что проверять в AI-коде перед merge.
✏️ Покажем всё на конкретных цифрах и вживую: сравним расходы до и после.
⬇️ 18 сентября, 19:00 МСК
⬇️ 1,5 часа · бесплатно
⬇️ Арсений Харланов и Олег Лайок
💬 Пишите в комментариях, где упираетесь в лимиты и на что уходят деньги. Самые залайканные вопросы разберём на вебинаре.
🔗 Зарегистрироваться на вебинар | 3 981 |
| 19 | 📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика | 3 694 |
| 20 | 🤔 Вопрос с собеседования по Go
Что выведет программа?
❤️ — числа выведутся по порядку
🔥 — числа выведутся в случайном порядке
👍 — программа завершится с ошибкой
👇 Правильный ответ (нажми, чтобы прочитать):
🔥 — числа выведутся в случайном порядке
Каждая итерация запускает отдельную горутину. Значение val передаётся в функцию аргументом v, поэтому все горутины получают правильное число.
Но порядок выполнения горутин не гарантирован планировщиком Go. Поэтому вывод может быть, например:
30
10
50
20
40
sync.WaitGroup нужен, чтобы дождаться завершения всех горутин.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика | 3 821 |
