Fuzzing — автоматическое тестирование, при котором Go сам генерирует случайные входные данные и ищет краши или паники. Появился в Go 1.18. Ты пишешь fuzz-тест, а Go подбрасывает мусор на вход и смотрит, что сломается.
func FuzzParseJSON(f *testing.F) {
f.Add([]byte({"name":"test"}))
f.Fuzz(func(t *testing.T, data []byte) {
var result map[string]any
json.Unmarshal(data, &result)
})
}
Запускается через go test -fuzz=FuzzParseJSON. Найденные краши сохраняются в testdata/fuzz как корпус для регрессии. Особенно полезен для парсеров, валидаторов и любого кода, работающего с внешним вводом.