Главная  /  Статьи  /  Go

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 устроен так, что хороший инструмент здесь — это инструмент, который знает скучные шаблоны лучше вас. Vibe Codex именно такой: он не делает «искусство», он делает «нужно».

Готов попробовать?

brew tap xrouter-chat/tap && brew install vibe-codex — и за 30 секунд ты в деле.

Поставить Vibe Codex →