Библиотека Go (Golang) разработчика
Библиотека Go (Golang) разработчика
1 884 подписчиков · @golang_lib
К каналу →
🧪 Table-Driven Tests: Хватит плодить функции-клоны Проверяю PR джуниора. Файл на 500 строк, из них 450 - это тесты. Смотрю внимательнее, а там Test_ValidateEmail_Empty, Test_Valid…
Читать далее →
659
Челлендж по обработке миллиарда строк на Go: от 1 минуты 45 секунд до 4 секунд Пару недель назад я прочитал о запавшем мне в душу челлендже по обработке миллиарда строк, поэтому з…
Читать далее →
661

🌪 Fuzzing: Ломаем свой код, пока это не сделали другие Мы привыкли писать Unit-тесты по принципу: "Я ожидаю, что если подать А, выйдет Б".

🌪 Fuzzing: Ломаем свой код, пока это не сделали другие

Мы привыкли писать Unit-тесты по принципу: "Я ожидаю, что если подать А, выйдет Б".
Но проблема Unit-тестов в том, что они ограничены вашей фантазией. Вы тестируете только те кейсы, которые смогли придумать.

А что будет, если подать пустую строку? А если строку из 10 МБ эмодзи? А если битый JSON?

Тут на сцену выходит Fuzzing (Фаззинг).
Начиная с Go 1.18, он встроен прямо в go test.

Как это работает?
Фаззер - это бесконечная обезьяна, которая лупит по клавиатуре, пытаясь сломать вашу функцию. Но обезьяна умная.

1. Она берет ваши примеры (seed corpus).
2. Немного их меняет (мутирует биты, обрезает, дублирует).
3. Следит за покрытием кода (code coverage).
4. Если новый ввод зашел в новую ветку if, фаззер запоминает этот ввод и начинает мутировать уже его.

Цель фаззера - найти такие данные, которые вызовут panic, бесконечный цикл или съедят всю память.

Пример:
Допустим, у нас есть "безопасная" функция деления:

func SafeDiv(a, b int) int {
if b == 0 {
return 0 // Защита от паники?
}
return a / b
}

Пишем фазз-тест:

func FuzzSafeDiv(f *testing.F) {
// 1. Seed Corpus: даем примеры валидных данных
f.Add(10, 2)
f.Add(100, 5)

// 2. Fuzz Loop: запускаем хаос
f.Fuzz(func(t *testing.T, a int, b int) {
// Вызываем нашу функцию
// Если она запаникует — тест упадет
SafeDiv(a, b)
})
}

Запускаем: go test -fuzz=Fuzz
И через секунду фаззер найдет баг, о котором забывают 90% джунов (и 30% сеньоров).
При вводе SafeDiv(-9223372036854775808, -1) (MinInt64 / -1) программа упадет с переполнением, потому что результат не влезает в int64. Unit-тест вы бы такой в жизни не написали.

🔥 Senior Tip: Property-based Testing
Фаззинг нужен не только, чтобы искать паники. Он идеален для проверки инвариантов.
Например, если вы написали свой кодек или шифрование:

f.Fuzz(func(t *testing.T, original []byte) {
encoded := Encode(original)
decoded := Decode(encoded)

if !bytes.Equal(original, decoded) {
t.Fatalf("Данные повредились: %v -> %v", original, decoded)
}
})

Это найдет баги в пограничных случаях (например, когда байт равен 0x00 или 0xFF).

#golang #testing #fuzzing #security #quality

👉 @golang_lib
🚀 PGO: Как получить +10% к скорости, не написав ни строчки кода Все мы любим оптимизировать. Переписываем мапы, пулим объекты в sync.Pool, боремся с аллокациями. Но что, если я ск…
Читать далее →
618
🧩 Struct Padding: Как вы теряете гигабайты памяти на ровном месте Знаете это чувство, когда вы долго проектируете структуру, высчитываете типы, используете int8 вместо int, чтобы …
Читать далее →
584
Другие главы канала «Библиотека Go (Golang) разработчика»
Выберите главу, чтобы продолжить чтение
Все посты →
Глава от 11.06.2026
📜 Паттерн Saga: Как откатить то, что откатить нельзя Представьте классическую з…
👁 288 просмотров
Глава от 09.06.2026
🔄 Идемпотентность: Как не списать деньги дважды при ретраях Худшее, что может с…
👁 335 просмотров
Глава от 27.05.2026
📦 go mod: Хватит удалять go.sum, когда что-то сломалось Управление зависимостям…
👁 586 просмотров
Глава от 14.05.2026
🗑 Сборщик мусора в Go: Скрытый налог на ваш CPU Если вы спросите джуна, как раб…
👁 591 просмотров
Глава от 08.05.2026
🧬 Generics: Как перестать писать Java на Go Мы ждали их 10 лет. И вот, когда он…
👁 574 просмотров
Глава от 04.05.2026
🧩 Struct Padding: Как вы теряете гигабайты памяти на ровном месте Знаете это чу…
👁 584 просмотров
Глава от 30.04.2026
🚀 PGO: Как получить +10% к скорости, не написав ни строчки кода Все мы любим оп…
👁 618 просмотров
Глава от 24.04.2026
Челлендж по обработке миллиарда строк на Go: от 1 минуты 45 секунд до 4 секунд …
👁 661 просмотров
Глава от 23.04.2026
🧪 Table-Driven Tests: Хватит плодить функции-клоны Проверяю PR джуниора. Файл н…
👁 659 просмотров

Популярные посты канала «Библиотека Go (Golang) разработчика»

Хватит мучить sync.WaitGroup для HTTP-запросов Каждый джун проходит этот путь: 1. Запускаем 10 горутин через go func(). 2. Добавляем wg.Ad…
👁 756 просмотров
JSON быстрее, чем вы думаете Стандартный encoding/json в Go надежный, но... медленный. Он активно использует рефлексию, что бьет по CPU на …
👁 756 просмотров
"Семафор". Не убей базу данных Запустить 10,000 горутин в Go дешево. А вот открыть 10,000 коннектов к базе или внешнему API - дорого и боль…
👁 699 просмотров
Челлендж по обработке миллиарда строк на Go: от 1 минуты 45 секунд до 4 секунд Пару недель назад я прочитал о запавшем мне в душу челлендже…
👁 661 просмотров
Context Cancellation - это не kill -9 Одна из самых частых иллюзий у разработчиков, приходящих в Go: "Я вызвал cancel(), почему моя горутин…
👁 661 просмотров
🧪 Table-Driven Tests: Хватит плодить функции-клоны Проверяю PR джуниора. Файл на 500 строк, из них 450 - это тесты. Смотрю внимательнее, а …
👁 659 просмотров
🚀 PGO: Как получить +10% к скорости, не написав ни строчки кода Все мы любим оптимизировать. Переписываем мапы, пулим объекты в sync.Pool, …
👁 618 просмотров
🗑 Сборщик мусора в Go: Скрытый налог на ваш CPU Если вы спросите джуна, как работает память в Go, он ответит: "Ну, там есть GC, он сам всё …
👁 591 просмотров
📦 go mod: Хватит удалять go.sum, когда что-то сломалось Управление зависимостями в Go выглядит элегантно: написал import, сделал go mod tid…
👁 586 просмотров
🧩 Struct Padding: Как вы теряете гигабайты памяти на ровном месте Знаете это чувство, когда вы долго проектируете структуру, высчитываете т…
👁 584 просмотров
🧬 Generics: Как перестать писать Java на Go Мы ждали их 10 лет. И вот, когда они появились, код-ревью превратились в выставку угловых скобо…
👁 574 просмотров
🔄 Идемпотентность: Как не списать деньги дважды при ретраях Худшее, что может сделать ваш микросервис, это упасть с пятисоткой. Нет, вру. Х…
👁 335 просмотров
📜 Паттерн Saga: Как откатить то, что откатить нельзя Представьте классическую задачу: клиент нажимает кнопку «Купить тур». Вашему бэкенду н…
👁 288 просмотров
Тихая смерть памяти c time.After Внутри select часто используют таймеры для отмены долгих операций. Но есть нюанс, который может положить в…
👁 254 просмотров
🚧 Errors in Go: Хватит сравнивать ошибки через == Знакомая картина? Вы пишете запрос к базе, получаете ошибку, оборачиваете её для логов и …
👁 230 просмотров
⚡Memory Alignment: Когда порядок полей стоит гигабайты Часто при проектировании структур мы группируем поля логически: ID рядом с Name, фла…
👁 223 просмотров
Препроцессоры на Go: нарушение границ или сила -toolexec Мы в Смартомато — супер продуктовые ребята. Со временем у нас скопились недовольст…
👁 199 просмотров
🧠 Планировщик Go (GMP): Как 100 000 горутин работают на 4 ядрах Джуны часто думают, что горутины это магия. Написал go func(), и оно как-то…
👁 183 просмотров
Counterfeiter — инструмент для генерации самостоятельных, типобезопасных тестовых заглушек в Go При модульном тестировании часто нужны подд…
👁 181 просмотров
Как мы ускорили Golang-тесты на CI В этой статье я расскажу о том, как желание улучшить свой рабочий процесс CI помогло ускорить все golang…
👁 171 просмотров

Связанные темы в других каналах

Каналы из той же тематики, где часто появляются близкие сюжеты
Вся тема →
@canalmaxone
AntiCloudMod
AntiCloudMod — сообщество для тех, кто ценит свободу общения без облачной цензуры. Здесь обсуждают альтернативные мессенджеры, инструменты для приватности и децентрализов…
👥 374 550 · +72 030/7д
@WylsacomRed
Wylsacom Red
Официальный канал Wylsacom в Max. Тут всё про технологии и жизнь в ногу со временем! Номер заявления для регистрации в РКН: № 6979154178 Розыгрыши: kichaev@wylsacom.med…
👥 154 426 · +9 502/7д
@BelgorodDRONE
Информация БПЛА Белгород, Белгородский район
Информация БПЛА Белгород, Белгородский район — специализированный канал в мессенджере Макс, посвященный новостям и информации о беспилотных летательных аппаратах в регион…
👥 138 923 · +8 523/7д
@TikTokModCloud
TikTokModCloud
Официальные обновления стабильного мода TikTok Чат: https://clck.ru/3S6mVh По рекламе: https://iimax.ru/dim4ugan
👥 82 890 · +18 801/7д
@hitech
Hi-Tech
Оперативные новости, обзоры гаджетов, собственное видео, трансляции мировых анонсов и мероприятий По вопросам сотрудничества и размещения рекламы i.ostapenko@corp.mail.r…
👥 53 204 · -179/7д
@na_kruchok
ГЛЕНТ | МЕМЫ
Глент мемы Это фан-сообщество, созданное преданными поклонниками для поддержки творчества Глента. Данный канал НЕ является официальным и ведется фанатом.
👥 46 442 · +35 423/7д
🏷 Темы и теги
#golang #testing #fuzzing #security #quality #go разработка #библиотеки go #материалы для go #golang советы #Технологии
📋 О канале Библиотека Go (Golang) разработчика
Сборник реально полезных материалов для Golang разработчика: библиотеки, инструменты, статьи и советы — от новичка до профи. Без воды, только то, что пригодится в работе.
🔍 Архив всех постов Макс
Поиск по 8,617,524 постам из 201,174 каналов
Попробовать за 1 ₽ →
Удалить пост или канал с МАКСОТЕКИ
Заявка подтверждается через бота Макс: нужно быть администратором канала и добавить бота МАКСОТЕКИ в администраторы. После проверки канал или конкретный пост скрывается с сайта.
📊 Аналитика канала «Библиотека Go (Golang) разработчика» ➡️ Перейти в канал Макс
Заявка в МАКСОТЕКА
Добавьте свой канал в каталог
Зарегистрируйтесь в личном кабинете и добавьте канал за пару кликов.
Перейти в личный кабинет →

Бесплатная регистрация, быстрая модерация.