Библиотека Go-разработчика | Golang – Telegram
Библиотека Go-разработчика | Golang
23.5K subscribers
2.35K photos
48 videos
87 files
4.77K links
Все самое полезное для Go-разработчика в одном канале.

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

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

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

РКН: https://gosuslugi.ru/snet/67a4a8c2468
Download Telegram
Конкурентность, которая не блокирует бюджет

В Go мы любим простоту и эффективность. Наша новогодняя акция работает так же: никаких сложных условий и скрытых аллокаций памяти.

Ты берешь 3 курса, а платишь за 1.

Оплата по самому дорогому курсу в наборе, два других — бесплатно.

Что усилит Go-разработчика:

— архитектуры и шаблоны проектирования (микросервисы сами себя не построят);
— алгоритмы и структуры данных.

Запустить горутину обучения

Таймаут контекста: 31 декабря.

Помощь с выбором: @manager_proglib
👾1
⚡️ Зачем в Go errors.Is и errors.As

До Go 1.13 ошибок касались двумя инструментами: сравнение err == someErr и type assertion через err.(MyErrorType). Это работало пока ошибки были плоскими значениями, но сломалось в тот момент, когда в язык завезли нормальное оборачивание ошибок с контекстом.

Проблема с err == someErr в том, что оно сравнивает конкретное значение, а не суть ошибки. Как только начали делать fmt.Errorf("connect db: %w", err) или свои обертки с Unwrap, верхний err уже не равен исходному значению, несмотря на то, что логически это та же ошибка.

Нужен был стандартный способ раскрыть цепочку оберток и проверить лежит ли внутри нужная ошибка. Именно это делает errors.Is — проходится по цепочке через Unwrap и сравнивает каждое звено, пока не найдет нужный err или не упрется в nil.

Аналогичная история с типами. До Go 1.13 приходилось делать каскады type assertion или ручным образом проходить по цепочке unwrap’ов чтобы найти конкретный тип ошибки. errors.As формализует этот паттерн — он проходит по цепочке ошибок и пытается привести каждую к нужному типу, а при успехе заполняет ваш target.

Простым языком errors.Is — это сравнение с константной ошибкой, а errors.As — это типовая проверка с учетом оберток.

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

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

#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
10👍6
⚡️ Простой live reload не только для Go

Eletrize — это утилита для live reload, которая следит за файлами, пересобирает и перезапускает приложение при изменениях кода.

Идея возникла как замена Realize после того как команды автора столкнулись с проблемами установки и рандомными падениями этого тулза. В ответ он собрал Eletrize с упором на предсказуемый запуск, конфигурацию через отдельный файл и удобную интеграцию с VS Code launch конфигами.

Пример конфига:
schema:
- label: API
workdir: ""
envs:
key: "value"
env_file: ".env"
watcher:
path: "."
recursive: true
excluded_paths:
- "frontend"
extensions:
- ".go"
commands:
build:
method: "go"
args:
- "build"
envs:
key: "value"
env_file: ""
run:
- method: "./server"
envs:
PORT: "8080"
env_file: ""


Если не хочется тянуть тяжелые dev окружения вроде Docker compose для каждого pet проекта, Eletrize выглядит как вариант легкого live reload поверх стандартного go build && ./app, который можно использовать и с другими языками.

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

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

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

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
6👍3❤‍🔥2
🔎 Автоотклики, мок интервью и трекер откликов для IT специалистов

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

Библиотека программиста собрала 15 AI сервисов, которые закрывают весь цикл поиска работы за рубежом от портфолио и автоподачи откликов до имитации собеседований.

➡️ Список сервисов

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

🐸 Библиотека Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
😁325👍2❤‍🔥1
💯 Топ-вакансий для Go-разработчиков за неделю

Junior Go-Developer — от 140 000 ₽. Скидывайте другу, который всё никак не может вкатиться.

Middle Backend Developer — от 4 000 €

Go Tech Lead — от 400 000 ₽. Отличная возможность выйти на следующую ступень.

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

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

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

#GoWork
Please open Telegram to view this post
VIEW IN TELEGRAM
🌟 Первый релиз-кандидат Go 1.26

Go команда выкатили Go 1.26 RC1 и просят гоферов прогнать на нём нагрузки и тесты. Это тот самый момент, когда можно поймать баги регресса заранее и заодно подготовиться к нововведениям до финального релиза.

В 1.26 заметный упор на производительность и рантайм к примеру, ускорили cgo вызовы и мелкие аллокации. Если у вас есть прод на Go, сейчас хороший момент добавить ещё один CI job на go1.26rc1 и посмотреть, как себя ведут сборка, тесты и перфоманс.

Попробовать:
go install golang.org/dl/go1.26rc1@latest
go1.26rc1 download


Команда отдельно напоминает про телеметрию можно включить её командой:
go telemetry on


➡️ Release notes

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

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

#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🤔1
👎 Почему context.Value портит код

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

Но именно в этом и проблема context.Value превращается в чёрный ящик, ломает типобезопасность и делает важные зависимости невидимыми.

Паттерн «A положил payment в контекст, C его вытащил, а B просто прокинул ctx дальше» выглядит аккуратно, пока вы помните все неочевидные места чтения. Через неделю уже не видно, какие функции реально зависят от payment а это критические бизнес данные, спрятанные в контейнер без гарантий на уровне компилятора.

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

Как обычно делают с context.Value:
type Payment struct {
ID string
Amount int
}

func A(ctx context.Context, transactionID string) {
payment := dbGetPayment(ctx, transactionID)

// Кладём бизнес данные в контекст
ctx = context.WithValue(ctx, "payment", payment)

B(ctx)
}

func B(ctx context.Context) {
// Эта функция формально не знает про payment,
// но обязана протащить ctx дальше
doSomething(ctx)
C(ctx)
}

func C(ctx context.Context) {
// Где то глубоко в стеке достаем payment из «чёрного ящика»
payment, ok := ctx.Value("payment").(Payment)
if !ok {
log.Println("payment not found in context")
return
}

processPayment(payment)
}


context.Value стоит оставлять для узкого набора метаданных, а важные доменные данные лучше передавать явно через параметры.

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

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

#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍129🥱4💯2
This media is not supported in your browser
VIEW IN TELEGRAM
Go to Definition для Go-проектов без IDE

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

SourceCraft индексирует Go-код и предоставляет привычные инструменты IDE: переход к декларации и поиск использований. Точность навигации достигает высоких показателей, что позволяет полноценно разбираться в логике конкурентного кода и зависимостях прямо в окне просмотра пулл-реквеста.

Проверьте работу навигации по ссылке → https://sourcecraft.dev/code-navigation-demo/uikit/pr/2040
👍4🥱2
📎 Микрокомпилятор для микрокомпьютеров

TinyGo подвезли релиз 0.40.0 это финальное обновление 2025 года с упором на поддержку свежего LLVM, новое железо и зачистку багов.

Параллельно ускорили и облегчали встроенный сборщик мусора за счет урезания либы bdwgc и оптимизаций.

По железу появилась поддержка новых плат и микроконтроллеров в том числе ESP32 S3, Xiao ESP32S3, Gopher ARCADE и RP2350.

Внутри компилятора и рантайма прошлись по WASM и WASI добавили режим buildmode=wasi-legacy для старых сценариев, улучшили обработку финализаторов и экспорта функций, а также подчистили ошибки в интерпретаторе, cgo и обработке сообщений линкера.

➡️ Release notes

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

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

#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥152👍2
💼 Карьерная «страховка» для IT‑шника

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

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

🐸 Библиотека Go-разработчика
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍71
⚙️ Дамп вместо fmt.Printf

godump это минималистичный инструмент для отладки который красиво печатает структуры на Go в терминале или HTML и не требует зависимостей.

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

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

Пример:
type User struct { Name string }
godump.Dump(User{Name: "Alice"})
// #main.User {
// +Name => "Alice" #string
// }


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

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

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

#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍51🤔1
Под капотом управляемой базы данных в MWS Cloud Platform

Разбираем внутренности managed баз в 10-м выпуске реалити-проекта Building the Cloud.

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

📅 Эфир 25 декабря, 14:00 (мск)

🎁 Розыгрыш мерча MWS за лучший вопрос

👉 Регистрация
1
Что выведет код

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

👉 Посмотреть ответ в нашем канале с задачам

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

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

#ReadySetGo
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍4