在 Vibe Coding(氛围编程)语境下,Harness 不是传统意义上的测试脚手架,而是一套完整的 AI 代码生成约束与验证体系,用来让 AI 写的代码可控、可验证、可长期迭代。

Harness 的四层核心结构(Go 项目通用)

1. 环境约束(最基础)

定义 AI 能操作的边界,防止乱改项目。

约束类型 具体规则
目录白名单 只允许修改 internal/api/tests/
文件黑名单 禁止碰 go.modmain.go、配置文件、Dockerfile
依赖约束 只能使用项目已有的依赖,禁止新增未审核依赖
权限约束 AI 无生产环境权限,仅在测试 / 开发环境运行

2. 任务约束(生成前)

给 AI 明确的「任务说明书」,而不是模糊需求。

约束类型 具体规则
目标清晰 做什么、不做什么、边界在哪里
验收标准 必须通过哪些测试、lint、覆盖率
技术栈约束 必须用 Gin、GORM、Redis、特定目录结构
代码规范 必须遵循 Go 官方规范、团队 lint 规则、注释规范

3. 验证约束(生成后,最关键)

AI 写完代码,自动做「三道安检」,不合格直接打回。

验证阶段 具体内容
静态检查 golangci-lintgo vet、格式化、依赖审计
测试验证 必须通过单元测试、集成测试、API 测试(用你之前的 Go Harness)
运行验证 本地启动、冒烟测试、无 panic、无内存泄漏
架构校验 不破坏分层、不循环依赖、符合项目架构规范

4. 反馈闭环(长期迭代)

把 AI 成功 / 失败的经验沉淀下来,让 AI 越写越好。

反馈类型 具体内容
成功案例库 记录符合规范、通过验证的 AI 代码片段
失败案例库 记录 AI 常犯错误(如错误处理、并发、边界)
提示词模板 标准化 Prompt,让 AI 每次都按正确格式输出
版本控制 AI 代码必须走 PR、Code Review、CI/CD 流程

三、项目结构与配置示例

1. 目录结构(Go 项目标准)

1
2
3
4
5
6
7
8
9
10
11
12
13
your-go-project/
├── .harness/ # Harness 核心配置(AI 约束)
│ ├── rules/ # 规则文件(lint、依赖、架构)
│ ├── prompts/ # 标准化提示词模板
│ ├── scripts/ # 自动化验证脚本
│ └── config.yaml # Harness 全局配置
├── internal/
│ ├── testutil/harness/ # 传统 Go 测试 Harness(你之前的)
│ └── ... # 业务代码
├── tests/ # 集成/API 测试
├── .golangci.yml # 严格 lint 规则
├── Makefile # Harness 一键执行
└── go.mod

2. 核心配置:.harness/config.yaml(AI 行为约束)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 环境约束
env:
allowed_dirs: ["internal/", "api/", "tests/", "pkg/"]
forbidden_files: ["go.mod", "main.go", "configs/*.yaml", "Dockerfile"]
forbidden_deps: ["github.com/unsafe/*", "unmaintained/*"]

# 任务约束
task:
required_tests: ["unit", "integration", "api"]
min_coverage: 80
code_style: "go fmt + golangci-lint strict"
architecture: "clean architecture, no circular deps"

# 验证约束
verify:
pre_commit: ["golangci-lint run", "go test ./... -cover"]
ci_required: ["test", "lint", "smoke"]

3. 标准化提示词模板:.harness/prompts/go-service.txt

给 AI 固定格式的 Prompt,确保输出一致。

1
2
3
4
5
6
7
8
9
10
11
12
13
# Go 服务开发任务(严格遵循 Harness 约束)
## 需求
实现用户服务:创建、查询、更新、删除用户
## 约束(必须遵守)
1. 目录:internal/service/user_service.go
2. 依赖:仅使用 gin、gorm、redis(项目已有)
3. 规范:Go 官方规范、错误处理、注释、单元测试
4. 验证:必须通过 tests/service/user_service_test.go
5. 架构:遵循 Clean Architecture,不直接操作 DB
## 输出要求
- 完整代码 + 单元测试
- 符合 .golangci.yml 所有规则
- 无 panic、无内存泄漏

4. 自动化验证脚本:.harness/scripts/verify.sh(AI 代码自动安检)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/bin/bash
set -e

echo "=== Harness 验证开始 ==="

# 1. 静态检查
golangci-lint run ./... --timeout 5m
echo "✅ Lint 检查通过"

# 2. 单元测试 + 覆盖率
go test ./internal/... -coverprofile=coverage.out
go tool cover -func=coverage.out | grep "total:" | awk '{print "覆盖率: " $3}'
if [ $(go tool cover -func=coverage.out | grep "total:" | awk '{print $3}' | sed 's/%//g') -lt 80 ]; then
echo "❌ 覆盖率不足 80%"
exit 1
fi
echo "✅ 单元测试通过"

# 3. 集成测试
go test ./tests/... -v
echo "✅ 集成测试通过"

# 4. 冒烟测试(启动服务)
go run cmd/api/main.go &
sleep 2
curl -s http://localhost:8080/health | grep "ok"
kill $!
echo "✅ 冒烟测试通过"

echo "=== Harness 验证全部通过 ==="

5. Makefile(一键执行 Harness 流程)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 安装 Harness 依赖
harness-deps:
go install github.com/golangci/golangci-lint/cmd/golangci-lint@latest
go install gotest.tools/gotestsum@latest

# 运行完整 Harness 验证(AI 代码必须通过)
harness-verify:
bash .harness/scripts/verify.sh

# AI 代码生成 + 验证(完整流程)
ai-generate:
# 调用 AI 生成代码(如 Cursor、Claude、GPT-4)
# 这里替换成你的 AI 工具命令
@echo "AI 生成代码中..."
make harness-verify

四、Go 项目 Vibe Coding 完整工作流(落地步骤)

1. 准备阶段(1 次搭建,长期使用)

  • 搭建上述 Harness 目录结构
  • 配置 config.yaml、prompts、verify.sh
  • 写好传统 Go 测试 Harness(internal/testutil/harness)
  • 配置严格的 .golangci.yml

2. 日常开发流程(AI 写代码,Harness 把关)

  1. 写需求:用标准化 Prompt 描述需求(复制 .harness/prompts 模板)
  2. AI 生成:用 Cursor/Claude/GPT-4 生成代码
  3. Harness 验证:执行 make ai-generate,自动做 lint、测试、冒烟
  4. 人工 Review:快速看代码逻辑、架构、边界处理
  5. CI/CD:提交代码,CI 自动运行 Harness 验证
  6. 反馈闭环:把成功 / 失败案例更新到 .harness/prompts 和规则中

3. 关键实践(Go 项目必做)

  • AI 只写业务逻辑:Harness、配置、基础设施由人类写
  • 测试必须人类写:AI 写测试不可靠,人类写测试 + AI 写实现
  • 严格分层:AI 不能跨层调用,必须遵循 Clean Architecture
  • 禁止 AI 修改核心文件go.modmain.go、配置文件必须人类审核
  • 覆盖率强制 80%+:确保 AI 代码有足够测试覆盖