Конкурентность, которая не блокирует бюджет
В Go мы любим простоту и эффективность. Наша новогодняя акция работает так же: никаких сложных условий и скрытых аллокаций памяти.
Ты берешь 3 курса, а платишь за 1.
Оплата по самому дорогому курсу в наборе, два других — бесплатно.
Что усилит Go-разработчика:
— архитектуры и шаблоны проектирования (микросервисы сами себя не построят);
— алгоритмы и структуры данных.
Запустить горутину обучения
Таймаут контекста: 31 декабря.
Помощь с выбором: @manager_proglib
В Go мы любим простоту и эффективность. Наша новогодняя акция работает так же: никаких сложных условий и скрытых аллокаций памяти.
Ты берешь 3 курса, а платишь за 1.
Оплата по самому дорогому курсу в наборе, два других — бесплатно.
Что усилит Go-разработчика:
— архитектуры и шаблоны проектирования (микросервисы сами себя не построят);
— алгоритмы и структуры данных.
Запустить горутину обучения
Таймаут контекста: 31 декабря.
Помощь с выбором: @manager_proglib
👾1
До 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 — это типовая проверка с учетом оберток.📍 Навигация: Вакансии • Задачи • Собесы
#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10👍6
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, который можно использовать и с другими языками.📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6👍3❤🔥2
🔎 Автоотклики, мок интервью и трекер откликов для IT специалистов
Классическая схема «обновить резюме и закинуть пару откликов» перестала работать даже на локальном рынке, не говоря уже о международном.
Библиотека программиста собрала 15 AI сервисов, которые закрывают весь цикл поиска работы за рубежом от портфолио и автоподачи откликов до имитации собеседований.
➡️ Список сервисов
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
Классическая схема «обновить резюме и закинуть пару откликов» перестала работать даже на локальном рынке, не говоря уже о международном.
Библиотека программиста собрала 15 AI сервисов, которые закрывают весь цикл поиска работы за рубежом от портфолио и автоподачи откликов до имитации собеседований.
📍 Навигация: Вакансии • Задачи • Собесы
Please open Telegram to view this post
VIEW IN TELEGRAM
Junior Go-Developer — от 140 000 ₽. Скидывайте другу, который всё никак не может вкатиться.
Middle Backend Developer — от 4 000 €
Go Tech Lead — от 400 000 ₽. Отличная возможность выйти на следующую ступень.
📍 Навигация: Вакансии • Задачи • Собесы
#GoWork
Please open Telegram to view this post
VIEW IN TELEGRAM
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
📍 Навигация: Вакансии • Задачи • Собесы
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6🤔1
Идея положить данные в контекст и достать их через пару вызовов глубже звучит привлекательно. Код чище, сигнатуры функций не разрастаются, промежуточные уровни не знают о деталях.
Но именно в этом и проблема
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 стоит оставлять для узкого набора метаданных, а важные доменные данные лучше передавать явно через параметры.📍 Навигация: Вакансии • Задачи • Собесы
#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍12❤9🥱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
В 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 и обработке сообщений линкера.📍 Навигация: Вакансии • Задачи • Собесы
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥15❤2👍2
Подготовили карточки с важными пунктами о том, как не дать себя тихо выжить из компании. Полный набор для защиты в материале.
📍 Навигация: Вакансии • Задачи • Собесы
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7❤1
godump это минималистичный инструмент для отладки который красиво печатает структуры на Go в терминале или HTML и не требует зависимостей.
Инструмент решает типичную боль, когда приходится вручную форматировать структуры через
fmt.Printf, чтобы увидеть их содержимое. godump делает это автоматически, с подсветкой типов полей и защитой от циклических ссылок.Вывод можно оформить так, чтобы было видно место вызова, файл, строку, тип значения и структуру вложенности. Для повторяющихся указателей godump показывает ссылку вместо рекурсивного обхода.
Пример:
type User struct { Name string }
godump.Dump(User{Name: "Alice"})
// #main.User {
// +Name => "Alice" #string
// } 📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5❤1🤔1
Под капотом управляемой базы данных в MWS Cloud Platform
Разбираем внутренности managed баз в 10-м выпуске реалити-проекта Building the Cloud.
Покажем, как устроена архитектура управляемых баз данных, как работают агенты и реконсиляция, и что нужно сделать инженеру managed-решения, чтобы оно было безопасным.
📅 Эфир 25 декабря, 14:00 (мск)
🎁 Розыгрыш мерча MWS за лучший вопрос
👉 Регистрация
Разбираем внутренности managed баз в 10-м выпуске реалити-проекта Building the Cloud.
Покажем, как устроена архитектура управляемых баз данных, как работают агенты и реконсиляция, и что нужно сделать инженеру managed-решения, чтобы оно было безопасным.
📅 Эфир 25 декабря, 14:00 (мск)
🎁 Розыгрыш мерча MWS за лучший вопрос
👉 Регистрация
❤1
Если у вас есть компилятор в голове, то вы сходу знаете ответ, остальным предлагаем подумать и прикинуть что выведет код, прежде чем смотреть ответ.
👉 Посмотреть ответ
📍 Навигация: Вакансии • Задачи • Собесы
#ReadySetGo
Please open Telegram to view this post
VIEW IN TELEGRAM