context.WithoutCancel нужен, когда у вас есть операция, которая обязана завершиться независимо от того, Типичная проблема без него:
func handleRequest(ctx context.Context) {
doWork(ctx)
saveAuditLog(ctx) // ctx уже отменён — лог не запишется!
}Когда клиент
ctx отменяется, и все операции на нём падают с context.Canceled. Но некоторые вещи отменять нельзя.Вот так это можно обойти:
func handleRequest(ctx context.Context) {
doWork(ctx)
safeCtx := context.WithoutCancel(ctx)
saveAuditLog(safeCtx) // выполнится в любом случае
}WithoutCancel создаёт копию контекста, которая наследует values и deadline, но игнорирует отмену родителя.Please open Telegram to view this post
VIEW IN TELEGRAM
👍4
Функция выполнится
ctx, cancel := context.WithCancel(context.Background())
cancel() // уже отменён
context.AfterFunc(ctx, func() {
fmt.Println("Runs immediately")
})
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
Короткий ответ —
type Data struct {
Field1 int
Field2 int
mu sync.Mutex
}
// горутина 1
d.mu.Lock()
d.Field1 = i
d.mu.Unlock()
// горутина 2
d.mu.Lock()
d.Field2 = i
d.mu.Unlock()Мьютекс гарантирует, что в любой момент только одна горутина имеет
Обойтись без мьютекса можно только если поля
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔8❤1😢1🌚1
Самый востребованный навык в ИТ в 2026-м — навык создания ИИ-агентов
Мы полностью переработали курс «Разработка AI-агентов» под реалии 2026 года. Никакой долгой теории — с самого начала пишем код. Обучать и делиться набитыми шишками будут эксперты-практики из Газпромбанка, Альфа-Банка и других бигтехов.
В программе:
— архитектура автономных систем с тестированием, ReAct-циклами и контролем токенов;
— практическая работа с актуальными фреймворками LangGraph, AutoGen, MCP и CrewAI;
— настройка продвинутого RAG для парсинга документов и точного поиска;
— внедрение решений с учётом действующего законодательства (152-ФЗ);
— дипломная работа, за основу которой можно взять свой рабочий проект или задачу, которую предложим мы.
Эксперты поделятся инсайтами из реального продакшна — тем, о чём вам никогда не расскажет ни одна нейросеть.
Ах да, чуть не забыли! Дарим промокодAGENTSWEB на скидку 10 000 рублей и два курса сверху при покупке до 15 марта 🎁
→ Стать AI-инженером
Мы полностью переработали курс «Разработка AI-агентов» под реалии 2026 года. Никакой долгой теории — с самого начала пишем код. Обучать и делиться набитыми шишками будут эксперты-практики из Газпромбанка, Альфа-Банка и других бигтехов.
В программе:
— архитектура автономных систем с тестированием, ReAct-циклами и контролем токенов;
— практическая работа с актуальными фреймворками LangGraph, AutoGen, MCP и CrewAI;
— настройка продвинутого RAG для парсинга документов и точного поиска;
— внедрение решений с учётом действующего законодательства (152-ФЗ);
— дипломная работа, за основу которой можно взять свой рабочий проект или задачу, которую предложим мы.
Эксперты поделятся инсайтами из реального продакшна — тем, о чём вам никогда не расскажет ни одна нейросеть.
Запись первого открытого вебинара, на котором мы вместе с руководителем AI-направления в Альфа-Банке Полиной Полуниной пилили агента в прямом эфире.
Ах да, чуть не забыли! Дарим промокод
→ Стать AI-инженером
😁2
AfterFunc возвращает
stop := context.AfterFunc(ctx, func() {
// cleanup
})
if stopped := stop(); stopped {
fmt.Println("Callback cancelled before execution")
}stop() возвращает true — функция остановлена до stop() возвращает false — функция уже Please open Telegram to view this post
VIEW IN TELEGRAM
👍3❤1
time.Sleep(d) — усыпляет горутину на runtime.Gosched() — временно приостанавливает текущую горутину и передаёт
runtime.Goexit() — завершает горутину Блокировка на канале — горутина ждёт, пока кто-то не отправит или не прочитает данные. Естественная
sync.Mutex — вызов Lock() блокирует горутину, пока context.Context — горутина ctx.Done() и останавливается, когда контекст отменяется или истекает таймаут. Please open Telegram to view this post
VIEW IN TELEGRAM
👏4😁2😢1
Оцените их по шкале 🔥,❤️,👍,😢, 🥱,
где 🔥 — это супер, а 🥱 — это скучно.
Также приветствуется фидбек в комментах.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤11🔥10👍7
unique.Handle[T] — это Handle. Это позволяет сравнивать значения через == вместо reflect.DeepEqual или побайтового сравнения.import "unique"
h1 := unique.Make("hello")
h2 := unique.Make("hello")
fmt.Println(h1 == h2) // true — один и тот же указатель внутри
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥9
Кажется, мы окончательно перешли от игрушек к суровому AgentOps
Приглашаем на наш обновлённый курс по разработке ИИ-агентов. Никакой воды про «будущее нейросетей», только инженерный подход.
На курсе мы:
— пошагово строим готовые системы на
— настраиваем кэширование и роутинг, чтобы бот не сожрал токены;
— разбираемся со стейтом, учимся дебажить через time-travel и прикручиваем human-in-the-loop;
— выводим RAG в прод так, чтобы безопасники не завернули архитектуру из-за 152-ФЗ.
В пекло скучные лекции про общую инфраструктуру — сразу фокусируемся на агентных фреймворках и написании кода. Занятия ведут бывалые лиды из Газпромбанка и Альфы, набившие шишки на реальных задачах.
Сегодня последний день, когда можно забрать курс по старым ценам. Базовый тариф сейчас стоит 49 000 ₽ (вместо 62 990 ₽), продвинутый трек — 99 000 ₽ (вместо 124 990 ₽). Если не хочется отдавать всю сумму сразу, есть рассрочка. Торопитесь — на потоке осталось всего 5 мест!
→ Зафиксировать цену и перейти к сборке своих агентов
Приглашаем на наш обновлённый курс по разработке ИИ-агентов. Никакой воды про «будущее нейросетей», только инженерный подход.
На курсе мы:
— пошагово строим готовые системы на
LangGraph, CrewAI и MCP;— настраиваем кэширование и роутинг, чтобы бот не сожрал токены;
— разбираемся со стейтом, учимся дебажить через time-travel и прикручиваем human-in-the-loop;
— выводим RAG в прод так, чтобы безопасники не завернули архитектуру из-за 152-ФЗ.
В пекло скучные лекции про общую инфраструктуру — сразу фокусируемся на агентных фреймворках и написании кода. Занятия ведут бывалые лиды из Газпромбанка и Альфы, набившие шишки на реальных задачах.
Кстати, на днях мы пилили агента в прямом эфире, если пропустили — есть запись вебинара.
Сегодня последний день, когда можно забрать курс по старым ценам. Базовый тариф сейчас стоит 49 000 ₽ (вместо 62 990 ₽), продвинутый трек — 99 000 ₽ (вместо 124 990 ₽). Если не хочется отдавать всю сумму сразу, есть рассрочка. Торопитесь — на потоке осталось всего 5 мест!
→ Зафиксировать цену и перейти к сборке своих агентов
❤2😁1
GOPATH просто брал тот код, что уже лежал на
Go модули решают эту проблему в корне: каждая зависимость зафиксирована с конкретной
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3👾1
Только
==. Срезы, мапы и функции не подойдут, компилятор не пропустит.Please open Telegram to view this post
VIEW IN TELEGRAM
Любой интерфейс в Go — это два указателя. Пустой интерфейс (eface) хранит указатель на метаданные типа и указатель на данные. Непустой (iface) — указатель на itab (таблицу с информацией о типе и методах) и указатель на данные.
Само по себе это не проблема. Проблемы возникают из-за последствий такого устройства.
Когда вы передаёте конкретное значение в интерфейс, компилятор запускает
Простые типы: int, bool, указатели; компилятор нередко передаёт без аллокации. Но структуры и значения, которые реально убегают, аллоцируются. Это означает нагрузку на GC.
Вызов метода через интерфейс это косвенный вызов через
itab.fun[].Компилятор не знает во время компиляции, какая именно функция будет вызвана, поэтому:
• Компилятор не может подставить тело функции на
• Процессор видит косвенный переход и не может надёжно его
• Перед вызовом нужно прочитать адрес функции из
Это не катастрофа при редких вызовах, но в циклах с миллионами итераций разница ощутима.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥8🤔3
Указатель не даёт гарантии
== вернёт false.
Handle гарантирует что равные значения всегда один и тот же Handle.s1 := "hello"
s2 := "hello"
p1 := &s1
p2 := &s2
fmt.Println(p1 == p2) // false — разные адреса
h1 := unique.Make(s1)
h2 := unique.Make(s2)
fmt.Println(h1 == h2) // true — одно интернированное значение
Please open Telegram to view this post
VIEW IN TELEGRAM
👍7
Использование каналов в качестве итераторов долгое время было популярным паттерном, но оно имело две серьезные проблемы: производительность и управление ресурсами.
Каждый канал требует создания отдельной
Функции-итераторы работают в том же
Please open Telegram to view this post
VIEW IN TELEGRAM
🤔1
Начать рассказывать интервьюеру, как вы ловко дёргаете ручки API через базовый
Звучит как отличный план, да? Нет, это мгновенный отказ.
В свежем отчёте по рынку GPU говорится, что 54% компаний стопают ИИ-внедрения тупо из-за конских затрат на инфраструктуру. На серверах более 70% стоимости — это видеокарты. Поэтому на собесах сейчас спрашивают не про красивые промпты, а про жёсткую экономику агентов.
По сути, от вас ждут понимания, как лимитировать ресурсы на лету, роутить запросы и дебажить отказы через механизм
Что требуют от мидлов и выше:
— интеграция мультиагентных систем по стандарту
— суровый AgentOps: метрики, трейсинг, защита от деградации пайплайнов;
— локальный деплой Open Source под 152-ФЗ (без этого в финтех можно даже не стучаться).
Прямо сейчас можно урвать курс с увесистой скидкой(49 000 ₽ 62 990 ₽ за базовый тариф и 99 000 ₽ 124 990 ₽ за продвинутый трек) , но стоит поторопиться — на потоке осталось всего 5 мест.
👉 Подтянуть архитектуру до уровня прода
LangChain.Звучит как отличный план, да? Нет, это мгновенный отказ.
В свежем отчёте по рынку GPU говорится, что 54% компаний стопают ИИ-внедрения тупо из-за конских затрат на инфраструктуру. На серверах более 70% стоимости — это видеокарты. Поэтому на собесах сейчас спрашивают не про красивые промпты, а про жёсткую экономику агентов.
По сути, от вас ждут понимания, как лимитировать ресурсы на лету, роутить запросы и дебажить отказы через механизм
time-travel в LangGraph. Если вы до сих пор собираете ботов в ноутбуках, гляньте обновлённый курс «Разработка ИИ-агентов» — фокус там смещён с игрушечных концепций на суровый энтерпрайз.Что требуют от мидлов и выше:
— интеграция мультиагентных систем по стандарту
MCP;— суровый AgentOps: метрики, трейсинг, защита от деградации пайплайнов;
— локальный деплой Open Source под 152-ФЗ (без этого в финтех можно даже не стучаться).
Прямо сейчас можно урвать курс с увесистой скидкой
👉 Подтянуть архитектуру до уровня прода
🥱3😁1
Стандартные интерфейсы io.Reader и io.Writer при каждом вызове Read или Write обычно инициируют
bufio решает эту проблему путем создания промежуточного буфера в оперативной памяти. При чтении bufio.Reader заполняет этот буфер один раз за один системный вызов, а затем отдает данные из памяти по запросу.
Аналогично bufio.Writer накапливает данные и записывает их в целевой объект одним большим блоком, когда буфер заполняется или принудительно сбрасывается.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤4
В высоконагруженных системах постоянное создание новых
bufio.Reader/Writer создает нагрузку на сборщик мусора. Вместо создания нового объекта для каждого нового HTTP-запроса или файла, можно использовать Reset(io.Reader).Этот
bufio.Reader, подставить в него sync.Pool.Please open Telegram to view this post
VIEW IN TELEGRAM
🤔1
Значения без указателей в локальных переменных обычно размещаются на
Это возможно потому, что компилятор заранее знает время жизни переменной: она живёт ровно столько, сколько выполняется функция. Никакой внешней системы управления памятью для этого не нужно.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4👾1
Компилятор способен заранее определить, когда стековая память может быть
В случае кучи ни компилятор, ни среда выполнения не могут точно
Please open Telegram to view this post
VIEW IN TELEGRAM
OnceValue принимает
Результат
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3
Обёртка это замыкание, которое держит ссылки на once, result и f. Пока есть хотя бы одна ссылка на обёртку,
Please open Telegram to view this post
VIEW IN TELEGRAM
😁1