ar
Feedback
Библиотека Go-разработчика | Golang

Библиотека Go-разработчика | Golang

الذهاب إلى القناة على Telegram

Все самое полезное для 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، تحافظ القناة على نشاط مستقر. خلال آخر 30 يوماً تغيّر عدد الأعضاء بمقدار 8، وفي آخر 24 ساعة بمقدار 4، مع بقاء الوصول العام مرتفعاً.

  • حالة التحقق: غير موثّقة
  • معدل التفاعل (ER): يبلغ متوسط تفاعل الجمهور 16.23‎%. وخلال أول 24 ساعة من النشر يحصد المحتوى عادةً 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) تحافظ القناة على حداثتها ومستوى وصول مرتفع. وتُظهر التحليلات تفاعلاً نشطاً من الجمهور، ما يجعلها نقطة تأثير مهمة ضمن فئة التكنولوجيات والتطبيقات.

24 067
المشتركون
+424 ساعات
-97 أيام
+830 أيام
أرشيف المشاركات
🎓 Тестовый собес с Go Senior из Гамбурга, с опытом работы в Yandex и Uzum [ + эталонные ответы на 50 сложных вопросов в пода
🎓 Тестовый собес с Go Senior из Гамбурга, с опытом работы в Yandex и Uzum [ + эталонные ответы на 50 сложных вопросов в подарок ] В четверг, 8 октября, в 19:00 МСК приходи онлайн на тестовое собеседование. Можно посмотреть, как всё устроено изнутри, и понять, насколько ты готов к такому интервью. Интервьюер: Маруф Караев — Senior Software Engineer из Гамбурга, ex-Yandex, ex-Uzum. Как это будет: 📂 Маруф задаст разработчику-добровольцу те вопросы и задачи, которые даёт кандидатам на своих интервью. Заранее их никто не знает; 📂 После каждого ответа Маруф даст обратную связь: что прозвучало сильно, а что стоило раскрыть иначе. Так станет понятнее, на что обращают внимание на собесе; 📂 В конце сможешь задать Маруфу любой вопрос и получить развёрнутый ответ; Эфир проходит в рамках менторской программы ШОРТКАТ для Go-разработчиков, которые хотят сменить работу и вырасти в грейде и зарплате. 🎁 Подарок для всех, кто зарегается на веб: файл с эталонными ответами на 50 сложных вопросов с Go-интервью 🔥 Жми на кнопку, чтобы попасть на эфир и забрать подарок ↓ @shortcut_go_bot Реклама. О рекламодателе.

🧑‍💻 Эмулятор AWS-сервисов Kumo — это небольшой инструмент на Go для локальной имитации AWS-сервисов. Он помогает разработчи
🧑‍💻 Эмулятор AWS-сервисов Kumo — это небольшой инструмент на Go для локальной имитации AWS-сервисов. Он помогает разработчикам тестировать приложения без облака.
Проект подходит для unit-тестов, где нужен мок для облачных вызовов. Устанавливается через go install github.com/sivchari/kumo@latest. Запускается как прокси, а SDK настраивается на локальный эндпоинт.
Поддерживает базовые операции над S3: создание бакетов, загрузку объектов, список файлов. Для DynamoDB эмулирует таблицы, put/get item. Конфиг через флаги или env. ➡️ Репозиторий 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика #GoLive

👨‍💻 Библиотека для написания 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-разработчика

🤔 Вопрос с собеседования по Go Что выведет программа? ❤️ — 1 true / 0 false 🔥 — 1 true / 1 false 👍 — 1 false / 0 true 👾 —
🤔 Вопрос с собеседования по Go Что выведет программа? ❤️ — 1 true / 0 false 🔥 — 1 true / 1 false 👍 — 1 false / 0 true 👾 — panic при втором чтении 👇 Правильный ответ (нажми, чтобы прочитать): ❤️ — 1 true / 0 false После close(ch) уже записанное значение можно получить обычным чтением. Когда канал пуст и закрыт, чтение возвращает нулевое значение типа и ok == false. ⚠️ Закрытый канал не становится сразу «пустым» — его буфер всё ещё можно прочитать. 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика

👩‍💻 Что на самом деле происходит внутри Go map? После Go 1.24 обычный map внутри работает уже не так, как раньше: вместо ст
👩‍💻 Что на самом деле происходит внутри Go map? После Go 1.24 обычный map внутри работает уже не так, как раньше: вместо старой схемы с overflow buckets используется Swiss Tables.
И там довольно много интересного: хеш делится на части, поиск идёт группами по 8 слотов, SIMD сразу сравнивает несколько значений, а при росте таблица может дробиться.
📍 В статье всё это разбирают буквально по шагам — от m["cow"] = 4 до устройства directory и таблиц. Если хочется понять, почему Go map работает быстро, а не просто знать, что он O(1) — почитать стоит. 🐸 Библиотека программиста

🔥 В Go 1.27 появился portable SIMD До этого SIMD-оптимизации в Go требовали архитектурного кода — например, отдельно для amd64 и arm64.
➡️ Теперь экспериментальный пакет simd предлагает единый интерфейс для разных CPU: AVX/AVX2/AVX512, NEON и Wasm SIMD. Размер вектора при этом не зашит в типы, а при отсутствии аппаратной поддержки операции могут выполняться через эмуляцию.
Пока API экспериментальный, но идея простая: один векторизованный код вместо отдельных реализаций под каждую архитектуру. 🔗 Подробнее о том, как это реализовано внутри Go 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика #GoLive

💡 Код работает. А data race уже есть В Go можно записать значение в одной горутине, прочитать в другой — и получить именно т
💡 Код работает. А 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-разработчика

💥 TCP/IP: что происходит с данными в сети Когда Go-приложение отправляет данные по сети, они проходят несколько уровней TCP/
💥 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-разработчика

🔴 Встроенные функции 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
🤩 Go с нуля: серия базовых шпаргалок Собрали путь от Hello, World! до goroutines, channels и context.
День 1 — синтаксис, модули и инструменты День 2 — типы, функции, слайсы, map и ошибки День 3 — интерфейсы, структуры, методы, указатели и композиция День 4 — goroutines, channels, select, WaitGroup, Mutex и context
Некоторые формулировки в карточках упрощены для новичков: порядок map не гарантирован, поведение slice зависит от backing array, а WaitGroup и Mutex решают разные задачи. 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика

🤔 Вопрос с собеседования по Go Что выведет программа? ❤️ — [1 2 3 4 5] / [1 2 10] 🔥 — [1 2 10 4 5] / [1 2 10] 👍 — [1 2 3 4
🤔 Вопрос с собеседования по 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-разработчика

🛠 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

🤩 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-разработчика

⚡️ 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

🛠 Напишите конфиг сами 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

🔴 Тестовый собес с Go Senior с опытом работы в Ozon, ex. Ситидрайв в этот четверг [+ разбор 50 сложных вопросов в подарок ]
🔴 Тестовый собес с 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 Реклама. О рекламодателе.

🔥 Шейдеры на Go: как оживить игру с помощью кода В Ebitengine шейдеры пишутся на Kage — языке с Go-подобным синтаксисом. С и
🔥 Шейдеры на Go: как оживить игру с помощью кода В Ebitengine шейдеры пишутся на Kage — языке с Go-подобным синтаксисом. С их помощью можно создавать эффекты прямо на уровне пикселей:
— маска повреждений зданий; — «дрожащий» рукописный текст; — ретро-CRT и глитчи; — зацикленная анимация текстур; — эффект строительства зданий.
➡️ В статье — практические примеры из игр Roboden и Decipherism, а также разбор Fragment(), текстур, uniform-параметров и DrawRectShader(). 📍 Навигация: Вакансии • Задачи • Собесы 🐸 Библиотека Go-разработчика #GoToProduction

😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как тратить меньше на AI-агентов — без потер
😭 Как не потратить недельный лимит AI-кодинга за три дня? Разберём на вебинаре, как тратить меньше на AI-агентов — без потери качества кода. 🔘 Поговорим о том: — когда дорогая модель действительно нужна, а когда хватит дешёвой; — сколько стоит один прогон и куда уходят токены; — какие задачи можно отдавать субагентам; — как настроить маршрутизацию моделей; — что проверять в AI-коде перед merge. ✏️ Покажем всё на конкретных цифрах и вживую: сравним расходы до и после. ⬇️ 18 сентября, 19:00 МСК ⬇️ 1,5 часа · бесплатно ⬇️ Арсений Харланов и Олег Лайок 💬 Пишите в комментариях, где упираетесь в лимиты и на что уходят деньги. Самые залайканные вопросы разберём на вебинаре. 🔗 Зарегистрироваться на вебинар⁠