Почитали тут свежий отчёт по рынку ИИ-ускорителей в РФ: оказывается, 54% компаний тормозят внедрение ИИ исключительно из-за конских цен на инфраструктуру.
Ну, то есть написать пет-проект с вызовом API это задача на вечер, а вот запустить агента в продакшн так, чтобы он не сжёг бюджет отдела за неделю — суровая инженерия.
По сути, сейчас мало уметь собирать RAG. Нужно считать токены, настраивать
Также в программе:
— оценка качества, трейсинг и защита от деградации пайплайнов;
— мультиагентные паттерны и интеграция по протоколу
— локальный деплой Open Source под 152-ФЗ (когда данные нельзя выносить наружу).
Кажется, это единственный адекватный roadmap по переходу от блокнотов к enterprise-решениям.
Прямо сейчас можно урвать курс с увесистой скидкой(49 000 ₽ 62 990 ₽ за базовый тариф и 99 000 ₽ 124 990 ₽ за продвинутый трек) , но стоит поторопиться — на потоке осталось всего 5 мест.
👉 Зафиксировать цену и начать собирать агентов, за которых не стыдно в проде
Ну, то есть написать пет-проект с вызовом API это задача на вечер, а вот запустить агента в продакшн так, чтобы он не сжёг бюджет отдела за неделю — суровая инженерия.
По сути, сейчас мало уметь собирать RAG. Нужно считать токены, настраивать
time-travel дебаг в LangGraph и уметь роутить запросы на лету. Всё это мы учли в обновлённом курсе по разработке AI-агентов, где акцент сделан именно на AgentOps и жёсткий контроль ресурсов.Также в программе:
— оценка качества, трейсинг и защита от деградации пайплайнов;
— мультиагентные паттерны и интеграция по протоколу
MCP;— локальный деплой Open Source под 152-ФЗ (когда данные нельзя выносить наружу).
Кажется, это единственный адекватный roadmap по переходу от блокнотов к enterprise-решениям.
Прямо сейчас можно урвать курс с увесистой скидкой
👉 Зафиксировать цену и начать собирать агентов, за которых не стыдно в проде
🥱15👍2❤1🤔1
💻 Свой Git-сервер, который запускается на Raspberry Pi
Gogs — self-hosted Git-сервис, написанный на Go. Это веб-интерфейс для работы с репозиториями, который разворачивается у вас на сервере.
По функциям похож на GitHub: репозитории, пул-реквесты, задачи, вики, вебхуки, деплой-ключи, организации, защищённые ветки.
Из необычного: поддержка Jupyter Notebook и PDF прямо в браузере, миграция репозиториев с других хостингов, Git LFS, аутентификация через LDAP, SMTP, GitHub и reverse proxy с поддержкой 2FA.
Требования к железу минимальные: хватит Raspberry Pi или VPS за $5. Для командной работы рекомендуется 2 ядра и 512 МБ ОЗУ. ОЗУ при росте команды почти не растёт, только процессор.
➡️ Репозиторий
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoToProduction
Gogs — self-hosted Git-сервис, написанный на Go. Это веб-интерфейс для работы с репозиториями, который разворачивается у вас на сервере.
По функциям похож на GitHub: репозитории, пул-реквесты, задачи, вики, вебхуки, деплой-ключи, организации, защищённые ветки.
Из необычного: поддержка Jupyter Notebook и PDF прямо в браузере, миграция репозиториев с других хостингов, Git LFS, аутентификация через LDAP, SMTP, GitHub и reverse proxy с поддержкой 2FA.
Требования к железу минимальные: хватит Raspberry Pi или VPS за $5. Для командной работы рекомендуется 2 ядра и 512 МБ ОЗУ. ОЗУ при росте команды почти не растёт, только процессор.
📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
❤6🔥4😁2
Кажется, что ответ очевиден, но Go любит сюрпризы. Подумайте хорошенько, прежде чем скроллить вниз, ведь ответ
💡 Подсказка:
📍 Навигация: Вакансии • Задачи • Собесы
#ReadySetGo
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
sync.Pool это один из самых неправильно понимаемых типов в стандартной библиотеке. Выглядит как пул объектов, им и является, но с одной гарантией, которая удивляет: GC может выселить всё содержимое пула в любой момент, без предупреждения.Для чего он реально нужен
Один конкретный сценарий: снизить давление аллокаций для короткоживущих переиспользуемых объектов:
bytes.Buffer, структуры протокольных сообщений, временные срезы.var bufPool = sync.Pool{
New: func() any {
return new(bytes.Buffer)
},
}
func processRequest(data []byte) []byte {
buf := bufPool.Get().(*bytes.Buffer)
buf.Reset() // обязательно: сбрасываем перед использованием
defer bufPool.Put(buf)
buf.Write(data)
return buf.Bytes()
}Две ошибки, которые случаются почти всегда
Забыть
Reset(). Пул переиспользует объект, но не его содержимое. Всё, что записал предыдущий пользователь, никуда не делось. Всегда сбрасывайте состояние перед работой с полученным объектом.Использовать объект после Put. Как только вызвали Put — объект принадлежит пулу. Обращение к
buf.Bytes() после возврата — это гонка данных, которая просто ещё не выстрелила.📍 Навигация: Вакансии • Задачи • Собесы
#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🙏4👍2
Go не создан для JIT-компиляции. Сборщик мусора требует строгой формы стека, и если JIT-код нарушает эти ожидания, программа падает с
fatal error: unexpected signal during runtime execution. Разработчик решил эту проблему и опубликовал библиотеку gojit.Почему это сложно
В Go два ABI. ABI0 передаёт аргументы через стек, ABIInternal через регистры. Внутри рантайма Go использует ABIInternal, снаружи видит ABI0. JIT-код об этом ничего не знает. Добавьте сюда сборщик мусора, который в любой момент может проверить стек, и прямой вызов Go-функций из JIT превращается в лотерею.
Как это решает gojit
Трюк в том, чтобы вызывать Go-функцию не напрямую из JIT-кода, а через метку внутри Go Assembly. Рантайм Go считает такой вызов легитимным и не падает при сборке мусора или росте стека.
В ассемблерный трамплин добавляется метка gocall:
TEXT ·callJIT(SB), 0, $8-8
NO_LOCAL_POINTERS
MOVQ code+0(FP), AX
JMP AX
gocall:
CALL CX
JMP (SP)
Отдельная asm-функция возвращает точный адрес ABI0-реализации, а не адрес ABIInternal-обёртки, которую Go подставляет по умолчанию. Зная этот адрес, JIT-код кладёт указатель на Go-функцию в RCX, прыгает в gocall, функция выполняется, стек возвращается в порядок.
В библиотеке всё это спрятано за методом
CallFunc(f func).📍 Навигация: Вакансии • Задачи • Собесы
#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
❤9😢2
— go-sqlite3 v0.32.0
Минорный релиз, в котором обновлён движок до SQLite 3.51.3. Это, скорее всего, последняя версия, зависящая от wazero — runtime для запуска WebAssembly.
— Antfly
аспределённый поисковый движок на Go с гибридным поиском (BM25 + векторы + граф), встроенными RAG-агентами и поддержкой мультимодальных данных.
— drift
Заставка для терминала на Go. Запускается автоматически при простое и показывает анимации: braille-волны, созвездия, матричный дождь из катаканы и поток частиц.
— Критическая дыра в gRPC-Go
— Wire стал быстрее в 70 раз
— Словарь айтишника
📍 Навигация: Вакансии • Задачи • Собесы
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
🛠 Конкурентность без бойлерплейта
Когда нужно запустить несколько горутин, дождаться всех и обработать первую ошибку, то руки обычно тянутся к
Давайте попробуем использовать errgroup.
Если любая горутина вернула ошибку — производный ctx отменяется, остальные горутины, которые слушают контекст, завершаются досрочно:
Если нужно сделать 200 запросов, но не более 10 одновременно — errgroup хорошо компонуется с семафором:
С sync.WaitGroup и каналом вам нужно самостоятельно: не забыть wg.Add, не забыть wg.Done в defer, правильно буферизировать канал ошибок, не заблокироваться на записи в него, вручную отменять контекст при ошибке.
errgroup делает всё это за вас и при этом хорошо компонуется с таймаутами и отменой.
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoDeep
Когда нужно запустить несколько горутин, дождаться всех и обработать первую ошибку, то руки обычно тянутся к
sync.WaitGroup плюс канал для ошибок. Это легко сделать неправильно: пропустить ошибку, получить дедлок, написать двадцать строк там, где достаточно пяти.Давайте попробуем использовать errgroup.
g.Go запускает горутину. g.Wait ждёт все и возвращает первую ненулевую ошибку.Если любая горутина вернула ошибку — производный ctx отменяется, остальные горутины, которые слушают контекст, завершаются досрочно:
func fetchAll(ctx context.Context, ids []string) ([]Result, error) {
g, ctx := errgroup.WithContext(ctx)
results := make([]Result, len(ids))
for i, id := range ids {
i, id := i, id // захватываем переменные цикла
g.Go(func() error {
r, err := fetch(ctx, id)
if err != nil {
return err
}
results[i] = r
return nil
})
}
if err := g.Wait(); err != nil {
return nil, err
}
return results, nil
}Если нужно сделать 200 запросов, но не более 10 одновременно — errgroup хорошо компонуется с семафором:
sem := semaphore.NewWeighted(10)
g.Go(func() error {
if err := sem.Acquire(ctx, 1); err != nil {
return err
}
defer sem.Release(1)
return doWork(ctx)
})
С sync.WaitGroup и каналом вам нужно самостоятельно: не забыть wg.Add, не забыть wg.Done в defer, правильно буферизировать канал ошибок, не заблокироваться на записи в него, вручную отменять контекст при ошибке.
errgroup делает всё это за вас и при этом хорошо компонуется с таймаутами и отменой.
📍 Навигация: Вакансии • Задачи • Собесы
#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤4
При удалении релиза Gogs вызывает git-команду примерно так:
process.ExecDir(..., "git", "tag", "-d", rel.TagName)
rel.TagName передаётся напрямую, без разделителя --. Если имя тега начинается с -, Git воспринимает его как флаг, а не как аргумент. Это классическая инъекция аргументов.Что делать
Обновиться до Gogs 0.14.2. Уязвимость обнаружили и закрыли.
📍 Навигация: Вакансии • Задачи • Собесы
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
🤯 QA в 2026 — это уже не «нажми кнопку»
Архитектура микросервисов, SQL, Kafka, логи, автотесты. Именно это работодатели хотят видеть сейчас — и слово «желательно» в вакансиях давно сменилось на «обязательно».
➡️ С чего начать без IT-бэкграунда
Спойлер:из бэка переход почти не требует усилий
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
Архитектура микросервисов, SQL, Kafka, логи, автотесты. Именно это работодатели хотят видеть сейчас — и слово «желательно» в вакансиях давно сменилось на «обязательно».
Спойлер:
📍 Навигация: Вакансии • Задачи • Собесы
Please open Telegram to view this post
VIEW IN TELEGRAM
😁4🤔1
В Go тип реализует интерфейс неявно, никаких
implements не нужно. Это элегантно, но создаёт тихую ловушку: вы думаете, что тип реализует интерфейс, но из-за несовпадения сигнатуры метода — не реализует. Узнаёте об этом только в рантайме, когда присвоение падает.Лечится одной строкой, которая ничего не стоит в рантайме:
var _ io.Reader = (*MyReader)(nil)
Что здесь происходит
Объявляется переменная типа
io.Reader, ей присваивается nil-указатель на MyReader, результат выбрасывается. Если *MyReader не реализует интерфейс, то компилятор отклонит код. Если реализует, то строка компилируется и не генерирует никакого кода.Такой же приём используется в стандартной библиотеке Go и в крупных open-source проектах.
📍 Навигация: Вакансии • Задачи • Собесы
#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍26❤3
Gapcast — это инструмент для аудита WiFi-сетей: перехват пакетов, инъекции, Evil Twin с Captive Portal и оценка дистанции до точки доступа по RSSI. Написан на Go, лицензия GPL-2.0.
Что умеет
Сканирование 2.4 и 5 ГГц одновременно, запись в .pcap, восстановление данных из файла — в том числе от Wireshark. Deep Scan по одному BSSID проходит три фазы: определение канала, сбор пакетов, расчёт дистанции.
Установка
git clone https://github.com/ANDRVV/gapcast.git
cd gapcast && go build -buildvcs=false
./gapcast -i <interface>
Сканирование сетей:
# 2.4 ГГц
./gapcast -i wlan0
# 5 ГГц
./gapcast -i wlan0 -5g
# Оба диапазона + радар дистанции
./gapcast -i wlan0 -2.4+5g -radar
# Только точки доступа, без клиентов
./gapcast -i wlan0 -2.4+5g -beacon
# Долгое сканирование без пропуска неактивных устройств
./gapcast -i wlan0 -2.4+5g -d
📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Markdown-CMS — это система управления контентом, где вместо базы данных и визуального редактора используются обычные .md файлы с текстом.
Foundry это свежий проект как раз про такой подход.
Пайплайн простой: конфиг → загрузка контента → граф сайта → маршруты → рендеринг → public/. Два графа в памяти: SiteGraph: документы, роуты, таксономии; и DependencyGraph для инкрементальных пересборок. При изменении файла пересобираются только затронутые страницы.
Что есть из коробки
Плагины с хуками на загрузку/сборку/раздачу, темы с layout-слотами, RSS и sitemap, импорт из WordPress и legacy-Markdown, JS SDK для фронтенда и админки. Валидация битых ссылок, осиротевших медиафайлов и дублирующихся URL — командой foundry validate.
Быстрый старт:
go install github.com/sphireinc/foundry/cmd/foundry@latest
foundry serve # dev-сервер с live reload
foundry build # статика в public/
📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5👍2🤔1
Golang Developer, Middle+ — до 300 000 ₽, удаленно
Go-разработчик (Мониторинг) — до 585 000 ₽, удаленно по Москве
Бэкенд-разработчик (Storage) — до 500 000 ₽, в офисе/гибрид в Москве
#GoWork
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
🛠 Go Fiber v3: как мигрировать с v2
Fiber v3 вышел в стабильный релиз. Если вы используете v2 в продакшене, вот что нужно знать перед миграцией и зачем она вообще нужна.
Что поменялось
Три изменения, которые влияют на код
1️⃣ fiber.Ctx теперь реализует context.Context
В v2 приходилось вызывать
2️⃣ Статика переехала в middleware
Метод
3️⃣ Изменился метод Listen
Метод
Как мигрировать
Команда Fiber выпустила CLI с встроенным инструментом миграции:
После запуска обязательно проверяйте весь diff вручную. Инструмент иногда меняет код, который к Fiber не относится.
Что ещё появилось в v3
Пакет
Нативная поддержка
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoToProduction
Fiber v3 вышел в стабильный релиз. Если вы используете v2 в продакшене, вот что нужно знать перед миграцией и зачем она вообще нужна.
Что поменялось
Три изменения, которые влияют на код
В v2 приходилось вызывать
c.UserContext(), чтобы передать контекст в стандартные библиотеки. В v3 fiber.Ctx удовлетворяет интерфейсу context.Context напрямую.// v2
ctx := c.UserContext()
rows, err := db.QueryContext(ctx, "SELECT ...")
// v3
rows, err := db.QueryContext(c, "SELECT ...")
Метод
app.Static() убран. Его функциональность перенесена в отдельный static middleware.// v2
app.Static("/", "./public")
// v3
import "github.com/gofiber/fiber/v3/middleware/static"
app.Use("/", static.New("./public"))
Метод
Listen объединён с конфигурацией. Настройки теперь передаются напрямую в вызов. Если у вас есть кастомная конфигурация запуска сервера, придётся поправить.Как мигрировать
Команда Fiber выпустила CLI с встроенным инструментом миграции:
go install github.com/gofiber/cli/fiber@latest
fiber migrate --to v3
После запуска обязательно проверяйте весь diff вручную. Инструмент иногда меняет код, который к Fiber не относится.
Что ещё появилось в v3
Drop() — тихий сброс соединения без ответа клиенту, удобно для DDoS-защиты.End() — немедленный сброс ответа.SendEarlyHints() — поддержка HTTP 103.Пакет
extractors с единым API для извлечения значений из заголовков, кук, query-параметров и форм. Раньше каждый middleware дублировал эту логику по-своему.RouteChain для Express-стиля объявления маршрутов. HEAD-маршруты теперь регистрируются автоматически для каждого GET.Нативная поддержка
context.Context убирает целый класс бойлерплейта. Основные breaking changes — это статика и конфигурация Listen, они чинятся быстро. Запустите CLI-инструмент, прогоните тесты, вручную проверьте diff.📍 Навигация: Вакансии • Задачи • Собесы
#GoToProduction
Please open Telegram to view this post
VIEW IN TELEGRAM
❤10🔥5
Это не гипотетический сценарий, а реальный случай. Консьюмер запустился на три минуты позже, чем нужно, и этого хватило, чтобы брокер удалил все сообщения. Проводки не прошли, данные пропали.
Архитектор собрал 5 типичных ошибок при работе с Kafka, тех, что не проявляются сразу, а в самый неподходящий момент.
📍 Навигация: Вакансии • Задачи • Собесы
Please open Telegram to view this post
VIEW IN TELEGRAM
👍11❤1
Сборщик мусора в Go потребляет два ресурса: память и CPU. Чтобы понять, как им управлять, разберём простую модель.
Память
GC нужно помнить две вещи: что осталось живым после прошлого цикла и что выделила программа с тех пор. Сложите эти два числа и получите размер кучи на момент следующего запуска GC.
CPU
Основная работа GC состоит в том, чтобы пройтись по всей живой памяти и пометить, что ещё нужно, а что можно выбросить. Чем больше живой памяти, тем дольше это занимает. Чем больше указателей и связанных списков, тем медленнее обход.
Компромисс на пальцах
Представьте уборщика в офисе. Убирается каждый час — мусора почти нет, но он постоянно мешает работать. Убирается раз в день — мусор накапливается, зато никто не отвлекается.
GC работает так же. Допустим, программа постоянно выделяет 10 МБ/с, а живая куча занимает 10 МБ.
GC запускается каждую секунду: успевает накопиться ещё 10 МБ, куча вырастает до 20 МБ, CPU-нагрузка составляет 10%.
GC запускается каждые 2 секунды: успевает накопиться 20 МБ, куча вырастает до 30 МБ, CPU-нагрузка падает до 5%.
Реже запускаем — меньше грузим CPU, но тратим больше памяти. Чаще запускаем — экономим память, но платим процессорным временем.
Это и есть главный компромисс GC: память vs CPU.
В Go частота запуска GC является единственным параметром, которым разработчик управляет напрямую. Всё остальное GC решает сам.
📍 Навигация: Вакансии • Задачи • Собесы
#GoDeep
Please open Telegram to view this post
VIEW IN TELEGRAM
👍10🔥2👏2🥱1
😱 Если ваш продукт не умеет отдавать данные в формате, понятном AI-агенту, то вас просто не существует
Скрипт не будет кликать по красивым кнопкам в браузере, он уйдёт к конкуренту с нормальным API. Перестроить архитектуру под машинных клиентов — это уже не хайп, а необходимое условие сохранения конкурентоспособности.
Как адаптировать продукт и не исчезнуть из выдачи:
— интегрировать
— научиться контролировать стоимость (лимиты, кэш, роутинг между моделями);
— настроить AgentOps: трейсинг, логирование и отлов регрессий.
Всё это ждёт вас на обновлённом курсе «Разработка AI-агентов». Мы специально сделали фокус на утилитарном инжиниринге и production-ready решениях.
Кстати, до 29 марта можно забрать курс с большой скидкой, и стоит поторопиться — мест на потоке всё меньше.
Зафиксировать цену и начать деплоить агентов без слива бюджета 👈
Скрипт не будет кликать по красивым кнопкам в браузере, он уйдёт к конкуренту с нормальным API. Перестроить архитектуру под машинных клиентов — это уже не хайп, а необходимое условие сохранения конкурентоспособности.
Как адаптировать продукт и не исчезнуть из выдачи:
— интегрировать
MCP и A2A-взаимодействие, чтобы агенты могли вас читать;— научиться контролировать стоимость (лимиты, кэш, роутинг между моделями);
— настроить AgentOps: трейсинг, логирование и отлов регрессий.
Всё это ждёт вас на обновлённом курсе «Разработка AI-агентов». Мы специально сделали фокус на утилитарном инжиниринге и production-ready решениях.
Кстати, до 29 марта можно забрать курс с большой скидкой, и стоит поторопиться — мест на потоке всё меньше.
Зафиксировать цену и начать деплоить агентов без слива бюджета 👈
🥱17😁3🤔2👍1
🔄 GoLand 2026.1 вышел
С пылу с жару — GoLand 2026.1. Несколько полезных обновлений для Go-разработчиков.
Синтаксические обновления для Go 1.26. IDE теперь сама находит устаревший код и предлагает перейти на новый синтаксис. Поддерживаются два паттерна: создание указателей через
Git worktrees. Теперь можно работать с несколькими ветками одновременно без переключения контекста. Удобно для hotfix-ов или когда AI-агенту нужна отдельная ветка.
Больше AI-агентов. Помимо Junie и Claude Agent, добавлена поддержка GitHub Copilot, Cursor и других агентов через Agent Client Protocol (ACP). Устанавливаются в один клик через новый ACP Agent Registry.
Terraform Stacks. Базовая поддержка работы со стеками прямо в IDE: навигация по компонентам, автодополнение, создание деплойментов.
Wayland по умолчанию на Linux. Улучшены рендеринг и обработка ввода. Если Wayland недоступен, IDE автоматически переходит на X11.
Code With Me уходит. Начиная с 2026.1 плагин исключён из поставки IDE. Он доступен в JetBrains Marketplace как отдельный плагин, но 2026.1 станет последней версией с официальной поддержкой сервиса.
➡️ Источник
📍 Навигация: Вакансии • Задачи • Собесы
🐸 Библиотека Go-разработчика
#GoLive
С пылу с жару — GoLand 2026.1. Несколько полезных обновлений для Go-разработчиков.
Синтаксические обновления для Go 1.26. IDE теперь сама находит устаревший код и предлагает перейти на новый синтаксис. Поддерживаются два паттерна: создание указателей через
new() и типобезопасное разворачивание ошибок через errors.AsType. Применить изменения можно сразу по всему проекту через меню Refactor → Update Syntax или через Search Everywhere. Перед применением показывается diff-превью каждого изменения.Git worktrees. Теперь можно работать с несколькими ветками одновременно без переключения контекста. Удобно для hotfix-ов или когда AI-агенту нужна отдельная ветка.
Больше AI-агентов. Помимо Junie и Claude Agent, добавлена поддержка GitHub Copilot, Cursor и других агентов через Agent Client Protocol (ACP). Устанавливаются в один клик через новый ACP Agent Registry.
Terraform Stacks. Базовая поддержка работы со стеками прямо в IDE: навигация по компонентам, автодополнение, создание деплойментов.
Wayland по умолчанию на Linux. Улучшены рендеринг и обработка ввода. Если Wayland недоступен, IDE автоматически переходит на X11.
Code With Me уходит. Начиная с 2026.1 плагин исключён из поставки IDE. Он доступен в JetBrains Marketplace как отдельный плагин, но 2026.1 станет последней версией с официальной поддержкой сервиса.
📍 Навигация: Вакансии • Задачи • Собесы
#GoLive
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13🥱3👍1
Есть парсер логов. Работает месяцами. Однажды в лог прилетает одна аномальная строка: 100 КБ без символа переноса.
bufio.Scanner читает файл в цикле. Программа не паникует, не выбрасывает ошибку в stderr, не зависает. Просто эта строка не попадает в обработку. По умолчанию
Scanner не обработает токен длиннее bufio.MaxScanTokenSize, но какое ожидаемое поведение при переполнении?📍 Навигация: Вакансии • Задачи • Собесы
#ReadySetGo
Please open Telegram to view this post
VIEW IN TELEGRAM
👍9❤2