Библиотека Go-разработчика | Golang
24.1K subscribers
2.48K photos
48 videos
88 files
4.95K links
Все самое полезное для Go-разработчика в одном канале.

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

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

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

РКН: https://gosuslugi.ru/snet/67a4a8c24689c2151c752af0

#WXSSA
Download Telegram
⚒️ Контрактный подход к API

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

Huma автоматически генерирует OpenAPI 3.1 JSON или YAML и включает в спецификацию все операции которые зарегистрированы в API.

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

Плюс есть удобные дефолты по путям публикации. можно отдать openapi файл, UI документации и схемы, не делая отдельный сервис под docs.

➡️ Попробовать Huma

📍 Навигация: ВакансииЗадачиСобесы

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

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👏43
🐱 Переносим сайт на новый домен

Некоммерческая компания dotMeow запустила краудфандинг на создание нового домена верхнего уровня — и у них получилось. Если всё пойдёт по плану, то скоро мы увидим домен .meow.

Заявленная цена регистрации домена в зоне .meow — около €30 в год.

➡️ Сайт dotMeow

📍 Навигация: ВакансииЗадачиСобесы

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

#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
8🥱5👾3
📰 Первый дайджест 2026

Вот и прошла первая рабочая неделя нового года. Пора вспомнить что произошло за эти семь дней.

Go 1.25.6 и 1.24.12

Страшный сокращатель ссылок

Трудоголизм — новая база

Тело ответа утекло

Свежий Cup o' Go

📍 Навигация: ВакансииЗадачиСобесы

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

#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
3
if price == old { buy() }

Завтра стоимость обучения в Proglib.academy вырастет. Забирайте курс сегодня без лишних аллокаций в бюджете.

Запустить процесс обучения
😁5👍21👾1
⚡️ Потоковая обработка данных со вкусом

Bento — это высокопроизводительный и устойчивый потоковый процессор для обработки данных. Это форк оригинального проекта Benthos, созданный до изменения лицензии.

Основные возможности:

• Обработка потоков — подключение различных источников и приёмников данных: Kafka, NATS, Redis, AWS, GCP, Azure, MongoDB, PostgreSQL.

Декларативная конфигурация — настройка пайплайнов через простые YAML-файлы:
input:
gcp_pubsub:
project: foo
subscription: bar

pipeline:
processors:
- mapping: |
root.message = this
root.user.age = this.user.age.number()

output:
redis_streams:
url: tcp://TODO:6379
stream: baz


• Язык маппинга Bloblang — мощный инструмент для трансформации, обогащения и фильтрации данных

• Гарантии доставки — обеспечивает доставку «at least once» без необходимости сохранения состояния на диск

• Простое развёртывание — доступен как статический бинарник, Docker-образ или serverless-функция

➡️ Попробовать Bento

📍 Навигация: ВакансииЗадачиСобесы

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

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍3🔥1
👨‍💻 Обёртка для Git

Наткнулись тут на CLI-тулзу, написанную на Go. Выглядит как набор алиасов, но может есть в этом более глубинный смысл?

Примеры:
# Создать feature branch add-user-login  
gwa feature add-user-login

# commit интерактивно
gwa commit

# Улучшенный colorized status
gwa status


➡️ Вот репозиторий

💬 Вы бы стали пользоваться таким? Или этот инструмент не для широкого круга разрабов?

📍 Навигация: ВакансииЗадачиСобесы

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

#GoTalk
Please open Telegram to view this post
VIEW IN TELEGRAM
😁82👏2🌚1
📎 Почему миллион горутин норм, а тысяча потоков уже боль

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

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

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

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

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

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

📍 Навигация: ВакансииЗадачиСобесы

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

#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍215
⚡️ Упрощаем обработку ошибок

Анализатор errorsastype из пакета modernize помогает заменить старый паттерн работы с ошибками на более безопасный вариант из Go 1.26. Он ищет типичные конструкции и предлагает правки, которые упрощают код без лишних переменных.

Раньше разработчики часто объявляли переменную для целевой ошибки и передавали её errors.As. Такой подход работал, но создавал лишние переменные и требовал осторожности с их использованием вне блока if.

Новый метод errors.AsType использует дженерики и возвращает саму ошибку плюс флаг успеха.

Вот классический случай до правки:
var myerr *MyErr
if errors.As(err, &myerr) {
handle(myerr)
}


После применения фикса получается:
if myerr, ok := errors.AsType[*MyErr](err); ok {
handle(myerr)
}


Код стал компактнее, без лишней var. Компилятор теперь проверяет типы на этапе сборки.

📍 Навигация: ВакансииЗадачиСобесы

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

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔15👍91
👨‍💻 Cloud native на Go

Cloud native приложения — это набор небольших, слабо связанных между собой микросервисов, специально разработанных для развёртывания в контейнерах.

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

Наткнулись на базовый минимум по этой теме и делимся с вами. Проект дополняется и недавно собрал 1000 звёзд на GitHub.

➡️ Научится писать cloud native

📍 Навигация: ВакансииЗадачиСобесы

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

#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5👾2
🤖 Нейросети на чистом Go без зависимостей

LOOM — это фреймворк для создания нейронных сетей, написанный полностью на Go. Работает на CPU, поддерживает WebAssembly и экспериментальную GPU-акселерацию через WebGPU.

Что выделяет проект

• Нулевые зависимости. Компилируется в один бинарный файл. Не требует Python runtime, библиотек C++ или внешних пакетов.

• Кросс-платформенная совместимость. Модель, обученная в Go, работает идентично в Python, TypeScript, C# и браузере через WASM.

• Нативная поддержка типов. Работа с int8, uint16, float32, float64 на уровне движка. Не только для хранения весов, но для полноценного обучения и инференса.

• Чистый Go токенизатор. BPE-токенизатор совместим с HuggingFace. Не зависит от Rust или C++ библиотек. Можете загружать и использовать токенизаторы из HuggingFace Hub напрямую.

Для каких задач подходит

• Встраивание ML в Go-приложения. Сервисы, CLI-утилиты, облачные функции, где нужен один бинарник без зависимостей.

• Кросс-платформенные решения. Обучаете модель в Go, деплоите в браузер через WASM или используете через Python API без потери точности.

• Эксперименты с архитектурой. Динамическая генерация сетей, step-based forward для отладки, встроенная телеметрия через GetMethodsJSON() и ExtractNetworkBlueprint().

➡️ Репозиторий

📍 Навигация: ВакансииЗадачиСобесы

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

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍205🤔4🤩1🥱1
This media is not supported in your browser
VIEW IN TELEGRAM
Высоконагруженные ИИ-агенты: роль RAG и Fine-tuning

23 января в 19:00 разберём, как интегрировать LLM в производительные системы на открытом уроке к курсу «Разработка ИИ агентов». Поговорим о том, как заставить модель отвечать по вашим данным, используя современные методы контекстного поиска.

Занятие ведёт Игорь Стурейко, тимлид в «Газпроме» и AI-архитектор. В своём видеосообщении Игорь объясняет, почему для создания надёжных агентов недостаточно просто вызвать API, и как инженерный бэкграунд помогает строить стабильные AI-решения.

Темы вебинара:

— использование RAG для работы с документацией в реальном времени;
— архитектурные подходы фреймворков уровня LangChain;
— сравнение эффективности дообучения и контекстного поиска.

📅 Когда: 23.01 в 19:00 МСК

Узнать подробности
3
😎 Топ-вакансий для Go-разработчиков

Техлид в команду разработки (B2B)
— до 490 000 ₽ в офис или гибрид в Москве или Питере.

Senior Golang-developer — от 342 000 ₽. Гибрид в Москве

Middle Golang Developer — от 280 200 ₽. Снова гибрид и снова Москва

📍 Навигация: ВакансииЗадачиСобесы

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

#GoWork
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱4👍31
✏️ Excel в JSON

Преобразование данных из Excel в JSON — частая задача при миграции legacy-систем или интеграции с API.

Excelize читает XLSX-файлы, парсит листы и ячейки. Код работает с динамическими данными: заголовки из первой строки, остальное — в map[string]string. Нет нужды в жёстких типах или схемах — идеально для неизвестных таблиц.

Установка:
go get github.com/xuri/excelize/v2


Пример кода

Функция берёт файл, пропускает заголовок и строит массив объектов:
package main

import (
"encoding/json"
"fmt"
"log"
"strings"

"github.com/xuri/excelize/v2"
)

func excelToJSON(filePath string) string {
f, err := excelize.OpenFile(filePath)
if err != nil {
log.Fatal(err)
}
defer f.Close()

rows, err := f.GetRows("Sheet1")
if err != nil || len(rows) == 0 {
return "[]"
}

data := make([]map[string]string, len(rows)-1)
headers := rows[0]

for i, row := range rows[1:] {
data[i] = make(map[string]string)
for j, cellValue := range row {
if j < len(headers) {
data[i][headers[j]] = cellValue
}
}
}

jsonData, _ := json.MarshalIndent(data, "", " ")
return string(jsonData)
}

func main() {
jsonStr := excelToJSON("data.xlsx")
fmt.Println(jsonStr)
}


Из таблицы с колонками id, name, age выйдет массив объектов. Пустые ячейки станут пустыми строками.

Библиотеки вроде Excel2JsonTree добавляют иерархию, но excelize хватит для 90% случаев.

📍 Навигация: ВакансииЗадачиСобесы

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

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10👾1
🎯 Нестандартные форматы резюме

Классическое резюме живет 7 секунд в голове рекрутера — а дальше стирается. Как выделиться в 2026-м, когда на одну вакансию приходят сотни похожих PDF-ок?

➡️ В статье — 6 небанальных форматов: от сайта-резюме с геймификацией до ченджлога в духе заметок о релизе.

📍 Навигация: ВакансииЗадачиСобесы

🐸 Библиотека Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱42🌚2
🤩 Set с минимальным потреблением памяти

Нужна коллекция для проверки существования ключа? Типичное решение джуна — map[string]bool или map[string]int. Работает, но расточительно: вы выделяете память под значение, которое вам не нужно.

Решение senior-уровня: использовать пустую структуру.

Вы обрабатываете миллионы ID пользователей и храните список уже обработанных. С map[int]struct{} вы экономите память на каждом элементе:
type void struct{}

uniqueIDs := make(map[int]void)
var member void

uniqueIDs[1001] = member
uniqueIDs[2002] = member

_, exists := uniqueIDs[2002]
// True — ID найден, память не потрачена зря


📍 Навигация: ВакансииЗадачиСобесы

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

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥17👍9🥱1🌚1
This media is not supported in your browser
VIEW IN TELEGRAM
Пятница, 19:00. Худшее время для деплоя, но идеальное, чтобы разобраться, как строить производительные ИИ-сервисы на стыке Go и RAG.

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

Основные темы:

— разбор подходов: RAG для динамических данных и Fine-tuning для стиля;
— стек технологий: работа с векторными хранилищами (`FAISS`, `Chroma`);
— кодинг: пайплайн для индексации документов и ответов на вопросы.

Один из спикеров — Алексей Яндутов, ML-инженер в поиске Яндекса.

Занятие открывает курс «Разработка AI-агентов». Если вы не планируете писать код для ИИ-сервисов, урок вам не подойдёт.

Записаться на урок
🌚2👍1