Vibe Codex для Go-разработчика: тесты, моки, разбор stack-trace
Go нагло строг с типами и нежно беспомощен с моками — идеальный язык для напарника, который любит шаблоны.
В Go разработчик тратит время не на «как написать», а на «сколько одинакового кода нужно написать ещё раз». Table-driven тесты, generated mocks, обвязка горутин и контекстов — Vibe Codex закрывает этот скучный пласт быстрее, чем вы успеете доскролить файл.
Table-driven тесты за один проход
Возьмём сервис с одной функцией. Vibe Codex прочитает её, найдёт все ветки и сгенерирует таблицу кейсов — включая граничные значения, которые забывают.
// internal/pricing/calc.go
func DiscountPercent(orderTotal int, isVIP bool) int {
if orderTotal < 1000 {
return 0
}
if isVIP {
return 15
}
if orderTotal >= 10000 {
return 10
}
return 5
}
$ vibe-codex "сгенерируй table-driven тесты для DiscountPercent"
[plan] 1 file: internal/pricing/calc_test.go
[generated]
func TestDiscountPercent(t *testing.T) {
cases := []struct {
name string
total int
vip bool
want int
}{
{"below threshold", 999, false, 0},
{"below threshold vip", 500, true, 0},
{"regular small", 1500, false, 5},
{"regular large", 10000, false, 10},
{"vip beats large", 50000, true, 15},
{"boundary 1000", 1000, false, 5},
{"zero", 0, false, 0},
{"negative — invariant?", -1, false, 0},
}
for _, tc := range cases {
t.Run(tc.name, func(t *testing.T) {
if got := DiscountPercent(tc.total, tc.vip); got != tc.want {
t.Errorf("got %d, want %d", got, tc.want)
}
})
}
}
Заметьте кейс «vip beats large» — это та самая граничная ситуация, которую программист в спешке пропускает. И отдельный кейс с отрицательной суммой: модель не уверена, что инвариант определён, и явно подсвечивает это в имени.
Моки через gomock или handwritten
Vibe Codex знает оба стиля: gomock с генерацией и собственные mock-структуры. Попросите — выберите.
$ vibe-codex "сгенерируй mock для PaymentClient через gomock, \
положи в internal/payments/mocks"
[plan] 2 files:
+ internal/payments/mocks/payment_client_mock.go
~ Makefile (add: go generate ./...)
Если в проекте нет gomock, ассистент честно скажет: «у вас нет, ставлю?» — и предложит конкретный go install.
Разбор panic-стека
Самое скучное в Go-проде — длинный stack-trace из горутин. Vibe Codex читает его как историю.
$ kubectl logs payments-7fb8 --tail=200 | vibe-codex panic
[opus] паника из горутины, запущенной в worker.Process,
строка internal/worker/process.go:142
[opus] корневая причина: чтение nil-pointer из orderCache.
[opus] orderCache инициализируется в Init(), но в тесте
integration_test.go его не вызывают — поэтому в
продакшене первый запрос валится после рестарта.
[opus] fix: либо инициализировать lazily в Get(),
либо упасть рано в New() при отсутствии cache.
Каналы и контексты
Самые типичные баги — забытый defer cancel() и горутина, которая никогда не завершается, потому что слушает только один канал. Vibe Codex умеет искать такие места статически и предлагать минимальные правки.
$ vibe-codex audit goroutines ./internal/worker
[gpt-5.2-codex] 3 находки:
- process.go:88 ctx.Done() не слушается в select
- dispatch.go:142 cancel() не вызывается на ранних return
- retry.go:55 горутина пишет в незакрытый канал — leak
Когда подключать reasoning-модель
Для генерации тестов и моков хватает быстрой модели — выбор делает Vibe Router. Когда задача архитектурная (разбить пакет, выбрать стратегию ретраев, спроектировать pipeline горутин), переключаемся явно:
$ vibe-codex --model claude-opus-4.7 \
"спроектируй pipeline из трёх стадий: fetch, transform, sink"
«Go награждает за скучный код. Vibe Codex награждает за то, что ты не пишешь его сам».
Маленький этикет
- Перед коммитом всегда запускайте
go vet ./...иgo test -race ./.... Vibe Codex может это сделать сам, но привычка ваша. - Не давайте модели менять
go.modбез явной просьбы — версии библиотек штука нежная. - Для критичных мест используйте флаг
--explain, чтобы ассистент сначала рассказал план, и только потом сделал.
Go устроен так, что хороший инструмент здесь — это инструмент, который знает скучные шаблоны лучше вас. Vibe Codex именно такой: он не делает «искусство», он делает «нужно».
Готов попробовать?
brew tap xrouter-chat/tap && brew install vibe-codex — и за 30 секунд ты в деле.
Поставить Vibe Codex →