Библиотека Go-разработчика | Golang
24K 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
👨‍💻 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
🧑‍💻 Перехватываем пользователя

Вы когда-нибудь подключались к WiFi в кафе или аэропорту и видели страницу «Войти в сеть»? Это и есть captive portal. Можно написать свой за 30 строк кода на Go.

go-captive — это библиотека для создания captive порталов, которая обрабатывает whitelist, редиректы и проксирование HTTP(s) трафика на пользовательский портал. По сути, это man-in-the-middle TCP прокси с умным роутингом.

Как работает авторегистрация портала

Современные браузеры и ОС автоматически находят captive portal. До стандартизации RFC7710 клиенты запрашивали предопределённые страницы для обнаружения порталов по ответу.

Минималистичный пример:
proxy := &captive.Portal{
LoginPath: "/login",
PortalDomain: "mycaptive.com",
WebPath: "static",
LoginHandler: func(r *http.Request) bool {
// true = пустить в интернет
return true
},
}
proxy.Run()


Библиотека сама:

• Перехватывает HTTP трафик неавторизованных клиентов
• Редиректит на ваш портал
• Терминирует HTTPS для неавторизованных
• Пропускает разрешённых пользователей

Для полноценного WiFi хотспота нужно ещё настроить iptables:
# Форвардим весь HTTP/HTTPS на прокси
iptables -t nat -A PREROUTING -i ap0 -p tcp --dport 80 \
-j REDIRECT --to-port 8080
iptables -t nat -A PREROUTING -i ap0 -p tcp --dport 443 \
-j REDIRECT --to-port 8081


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

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

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

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

#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1541🤩1
⚡️ Команда Go на связи

Статусное обновление о предстоящем релизе версии 1.26.0.

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

• 3 недели до релиза Go 1.26.0
• 214 открытых issues в майлстоуне
• 1 блокер, который нужно решить перед релизом

Работа кипит, 5 блокеров с предыдущего статуса команда уже закрыла.

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

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

#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12👾1
Какой Docker-образ можно использовать с бинарником, собранным с CGO_ENABLED=0

Собрали Go-приложение со статической линковкой. Какой минимальный образ можно брать для прода? alpine? ubuntu? А может вообще что-то экзотическое?

Попробуйте ответить до того, как посмотрите решение 👉 в нашем канале с задачами

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

#ReadySetGo
Please open Telegram to view this post
VIEW IN TELEGRAM
💯2
🛠 Анализатор mapsloop

В Go 1.23 появился пакет maps с готовыми функциями для работы со словарями. Анализатор mapsloop находит циклы, которые копируют данные между мапами, и предлагает заменить их вызовами из этого пакета.

Классический цикл копирования:
for k, v := range source {
target[k] = v
}


В зависимости от контекста анализатор предложит одну из функций:

maps.Copy(target, source) — когда копируете в существующую мапу
maps.Insert(target, source...) — при добавлении элементов
maps.Clone(source) — для создания копии
maps.Collect(iter) — при работе с итераторами

Вместо трёх строк — одна. Плюс сразу понятно намерение: вы копируете данные, а не делаете что-то сложное в цикле.

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

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

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
11🥱4👍2
Рутина множится, а ты всё ещё вручную «жаришь» каждый вызов LLM?

Это работа в забегаловке. Настоящий Шеф не пишет микросервисы вручную вечно — он проектирует Систему. 🐹

В понедельник, 26 января, стартует интенсив по разработке ИИ-агентов. Мы научим создавать эффективные автономные решения, которые закроют задачи бизнеса, пока ты занимаешься архитектурой.

В программе:

— мультиагентные системы в CrewAI: делегирование задач и параллельное исполнение;
— сложная логика в LangGraph: контроль состояний и предотвращение циклов;
tool use интеграция: подключение агентов к высоконагруженным API и БД. 🚀

Записаться на курс
😁6👾1
🌐 Дайджест недели

Чтобы двигаться вперёд нужно оглянуться назад на новости прошедших дней.

Команда Go делится статусом о релизе 1.26

Нестандартные форматы резюме

WhoDB 0.89.0

В свежем релизе WhoDB CLI починили баг в стриминге AI-запросов, вернули Alpine в Docker для уменьшения размера образа, встроили BAML в CLI для автономности и обновили entitlements под macOS, отключив AI на armv7.

Figlet-go v0.0.2-beta

Библиотека figlet-go полностью переписывает классический FIGlet 2.2.5 на Go, проходя все оригинальные тесты и генерируя идентичный вывод для создания ASCII-арта из текста.

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

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

#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
🌚1
Завтра стартуем: курс по разработке ИИ-агентов 🐹

Пора переходить к проектированию высокопроизводительных автономных систем. Мы научим создавать мультиагентные связки на CrewAI, управлять сложной логикой в LangGraph и связывать ИИ-решения с вашими базами данных и сервисами.

👉 Успейте занять место до начала занятий
🌚5❤‍🔥1👾1
💡 Минималист внутри вас одобряет

Анализатор minmax упрощает условные присваивания, заменяя конструкции if/else на вызовы встроенных функций min и max, которые появились в Go 1.21.

До преобразования:
if a < b {
x = a
} else {
x = b
}


После:
x = min(a, b)


Анализатор не применяется к числам с плавающей точкой. Причина: поведение min/max с NaN-значениями может отличаться от оригинальной if/else конструкции.

var a, b float64 = 1.0, math.NaN()

// if/else: может вернуть NaN в зависимости от порядка проверки
if a < b { x = a } else { x = b }

// min: имеет специфичное поведение с NaN
x = min(a, b)


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

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

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍54
🤩 Приложение, размывающее экран при плохой осанке

Posturr — приложение для macOS, которое следит за вашей осанкой через камеру и размывает экран, когда замечает, что вы сутулитесь. Выпрямились — экран мгновенно становится чётким.

Swift + Vision framework — очевидный выбор для macOS. Но что если переписать на Go?

Потенциальный стек: gocv для работы с камерой, mediapipe через CGo для оценки скрюченности, robotgo для манипуляций с экраном.

Swift + Vision — это easy mode для macOS. Go-реализация была бы сложнее, но открыла бы кроссплатформенность и интеграцию с существующими Go-экосистемами.

Если кто-то решится портировать на Go — было бы круто сделать это через TUI, чтобы запускать в tmux и видеть текущий статус осанки прямо в терминале. Что-то вроде htop, но для спины.

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

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

#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7🤔42🥰2🌚1