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

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

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

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

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

#WXSSA
Download Telegram
🪟 HTML-формы из Go-структур

Если вы пишете веб-приложения на Go и устали вручную рендерить HTML-формы — посмотрите на эту библиотеку.

go-form генерирует формы автоматически: берёт Go-структуру и отдаёт готовый HTML.

Как это работает

Описываете форму как обычную структуру:
type LoginForm struct {
Username string `form:"input,text" label:"Имя пользователя" required:"true"`
Password string `form:"input,password" label:"Пароль" required:"true"`
Email string `form:"input,email" label:"Email" required:"true"`
}


Подключаете шаблон и рендерите:
f := form.NewForm(templates.BootstrapV5)
funcMap := f.FuncMap()
tmpl := template.Must(
template.New("form").Funcs(funcMap).Parse(`{{ form_render .Form nil }}`),
)


Готово — форма с лейблами, плейсхолдерами и валидацией.

Что внутри

Поддерживаемые типы полей: text, password, email, number, date, datetime-local, time, color, range, hidden, search, url, tel, checkbox, radio, dropdown, textarea, multicheckbox.

Три готовых стиля оформления:

• Plain HTML — минимум стилей
• Bootstrap 5 — стандартная Bootstrap-разметка
• Tailwind CSS v3 — классы Tailwind

CSRF-защита — встроенная, с поддержкой middleware для стандартного http.ServeMux и Chi-роутера. Токены автоматически генерируются, проверяются и обновляются.

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

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

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

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
12🤔6👍3
⚡️ Быстрый старт без лишних шагов

Команда go run запускает код напрямую, без создания бинарного файла. Никаких промежуточных артефактов, никаких лишних шагов — просто написал и сразу проверил результат.

Для одного файла:
go run main.go


Для проекта с несколькими файлами:
go run .


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

Да, для продакшена всё равно нужен go build — бинарник быстрее стартует и проще деплоить. Но на этапе разработки и экспериментов go run — это про скорость мышления, а не скорость компилятора.

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

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

#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱186😁2
⚙️ unsafe.Add вместо ручной арифметики указателей

В Go есть анализатор unsafefuncs, который находит в коде ручную арифметику с указателями и предлагает заменить её на вызовы функций-хелперов из пакета unsafe.

Паттерн unsafe.Pointer(uintptr(ptr) + uintptr(n)) заменяется на unsafe.Add(ptr, n).

Функция unsafe.Add появилась в Go 1.17 именно для того, чтобы убрать громоздкое приведение типов, которое легко написать неправильно.

Цепочка uintptr(ptr) + uintptr(n) — это арифметика над голыми числами, и GC не знает, что тут был указатель.

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

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

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
🧑‍💻 Вопрос сообществу

Гоферы, вопрос к вам:
Используете ли вы Windows в качестве основной ОС для разработки на Go?


Как вам опыт? Всё работает гладко, или предпочитаете Linux/macOS?

Расскажите в комментариях — особенно интересно, как вы решаете вопросы с тулингом, WSL и окружением.

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

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

#GoTalk
Please open Telegram to view this post
VIEW IN TELEGRAM
📄 Для тех, кто остался на Windows

Winslop — утилита с одной задачей: убрать из Windows 11 всё лишнее.

Никакого Copilot в трее, никакой телеметрии, никаких виджетов и рекламы в меню Пуск. Только то, что вы сами разрешили оставить.

• показывает, что именно будет изменено
• ничего не запускает автоматически
• всё обратимо
• никакого облака — всё локально

👉 Чистим винду

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

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

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
13👍3
⚙️ Делаем настройки читаемыми

Когда вы пишете функцию с десятком параметров, особенно если это булевые флаги, код становится непонятным.

Просто посмотрите на строку:
client := NewClient("api.example.com", 30, true, false, 1000)

Не хватает контекста — что значит 30, true, false, 1000? Следующий параметр — это таймаут? Количество попыток? Логирование? Нет. Никто не знает.

Решение — паттерн функциональные опции. Он не просто улучшает читаемость, он делает код естественным, как английский язык.

Вот как это выглядит:
type Client struct {
endpoint string
timeout time.Duration
retries int
verbose bool
}

type Option func(*Client)

func WithTimeout(d time.Duration) Option {
return func(c *Client) {
c.timeout = d
}
}

func WithRetries(n int) Option {
return func(c *Client) {
c.retries = n
}
}

func WithVerboseLogging() Option {
return func(c *Client) {
c.verbose = true
}
}

func NewClient(endpoint string, opts ...Option) *Client {
c := &Client{
endpoint: endpoint,
timeout: 10 * time.Second,
retries: 3,
verbose: false,
}

for _, opt := range opts {
opt(c)
}

return c
}


Как это используется:
client := NewClient("api.example.com",
WithTimeout(30*time.Second),
WithRetries(5),
WithVerboseLogging(),
)


Как будто вы говорите: создаём клиента к api.example.com, с таймаутом 30 секунд, 5 попытками и включённым логированием.

Когда вы пишете настройки, не используйте 10 параметров. Используйте функции, которые описывают, что вы хотите. Тогда код не будет требовать комментариев — он сам будет говорить.

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

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

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍227🥰3😁2
🔐 Защищаем API

Почему API вообще атакуют?

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

👀 Смотрим видео и обороняемся

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

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

#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
За год мы провели три потока курса по ИИ-агентам, а теперь запускаем масштабное обновление!

В новом, четвёртом потоке мы учли все пожелания студентов, добавили большой блок про AgentOps и сместили фокус с базовых концепций на суровый инжиниринг. Скрутить агента из готовых API легко, а вот заставить его стабильно работать в высоконагруженном проде, маршрутизировать запросы и не сливать бюджет — задача со звёздочкой.

В программе:

— мультиагентные системы: протоколы A2A и иерархические команды;
— оркестрация пайплайнов: стабильная обработка запросов и time-travel;
— продвинутый RAG: масштабирование поиска по исходным источникам;
— контроль экономики: автоматическое переключение режимов обработки;
— развёртывание локальных опенсорс-моделей с соблюдением 152-ФЗ.

В честь старта продаж действует спецпредложение: 3 курса по цене 1 (два дополнительных курса в подарок).

Доступ к материалам для предварительной подготовки откроется сразу после оплаты.

По промокоду Agent забирайте скидку 10 000 ₽ (89 000 ₽ вместо 99 000 ₽). Успейте занять место до 28 февраля!

👉 Присоединиться к четвёртому потоку и вывести агентов в прод
🥱52
🤩 Топ-вакансий для Go-разработчиков за неделю

Middle Go — от 80 000 ₽, гибрид в Казахстане

Senior Backend Developer — от 3 000 до 4 000 $, удаленно

Junior+ Golang разработчик — до 150 000 ₽, удаленно в Москве

➡️ Еще больше топовых вакансий — в нашем канале Go jobs

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

#GoWork
Please open Telegram to view this post
VIEW IN TELEGRAM
😁14🥱31
Weekend Offer Multitrack: быстрый найм для опытных специалистов

Приглашаем бэкенд-разработчиков с опытом от 5 лет на C++, Python, Go или Java/Kotlin получить офер за 2 дня и поработать в трёх командах Яндекса на выбор.

Приходите, если вам важно видеть результат своей работы в живых системах и метриках, а не только в merged PR.

Как всё проходит:

🟢 До 6 марта — регистрация на сайте.
🟢 14 марта — технические секции.
🟢 15 марта — финальная секция и офер.

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

Подробности и форма регистрации — по ссылке.
Please open Telegram to view this post
VIEW IN TELEGRAM
🥱32👍2
🔄 Свежий релиз библиотеки для работы с Excel на Go

Вышла версия 2.10.1 библиотеки Excelize для чтения и записи файлов XLSX/XLSM/XLTX.

Новые возможности

• Новый тип ChartDataPoint и поля DropLines/HighLowLines для осей диаграмм

• Функция GetHyperLinkCells — получение ячеек с гиперссылками

• Функция GetSheetProtection — получение настроек защиты листа

• Поддержка вставки ICO-изображений

• В CalcCellValue добавлены формулы SORTBY и UNIQUE

AddChart теперь поддерживает цвета точек данных для круговых диаграмм

• В стриминговый writer добавлены SetColVisible и SetColOutlineLevel

SetConditionalFormat поддерживает новые наборы иконок: 3 треугольника, 3 звезды, 5 ячеек

AddPicture/AddPictureFromBytes теперь поддерживают установку имени изображения

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

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

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

#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
10🔥3
⚙️ Worker Pool в Go

Пул воркеров — один из ключевых паттернов конкурентности в Go. Разбираем пять аспектов, которые важно понимать на практике.

Ограничение параллельных задач

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

Канал с буфером как очередь

jobs := make(chan Task, 100) — буферизованный канал позволяет отправителю не блокироваться сразу, а складывать задачи в очередь.

Размер буфера — это компромисс: слишком маленький блокирует продюсера, слишком большой маскирует проблему перегрузки.

Динамическое управление размером пула

Статический пул прост, но неэффективен при переменной нагрузке. Динамический вариант отслеживает длину очереди и запускает или останавливает воркеры на лету — по сути, это примитивный автоскейлинг внутри одного процесса.

Graceful Shutdown

Просто закрыть канал недостаточно. Правильное выключение: закрываем канал задач → ждём, пока воркеры доделают текущие задачи → wg.Wait().

Без этого вы рискуете потерять задачи в процессе или получить панику при записи в закрытый канал.

Пул воркеров vs Семафор

Семафор через make(chan struct{}, N) проще в реализации и хорош для разовых ограничений.

Пул воркеров — для постоянного потока задач: воркеры уже запущены и готовы, нет оверхеда на старт горутины под каждую задачу.

Выбор зависит от того, разовое у вас ограничение или непрерывная обработка.

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

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

#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
6❤‍🔥1