本文件为在本仓库中工作的智能体提供执行与编码规范。
- 项目:TaskFlow(Go 1.25.1)
- 结构:分层 + CQRS(application / domain / infrastructure / interfaces / worker)
- 关键入口:
cmd/api/main.go、cmd/server/main.go - 配置:
configs/*.yaml,支持TASKFLOW_前缀环境变量覆盖
- 下载依赖:
make deps - 整理依赖:
make tidy - 构建全部:
make build - 构建 API:
make build-api - 构建 Worker:
make build-server
- 运行 API:
make run-api(使用configs/config.dev.yaml) - 运行 Worker:
make run-server(使用configs/config.dev.yaml)
- 全量测试(含 race + coverage):
make test - 生成覆盖率报告:
make test-coverage
- 单个包:
go test ./internal/application/task - 单个用例:
go test ./internal/application/task -run ^TestName$ - 全仓筛选单测:
go test ./... -run ^TestName$ - 若需禁用缓存:
go test ./internal/application/task -run ^TestName$ -count=1
- Lint:
make lint(golangci-lint)
- 启动 Redis:
make redis-up - 关闭 Redis:
make redis-down - Docker 全栈:
make docker-up/make docker-down - Asynqmon:
make asynqmon(UI 端口 8081)
- 生成 Protobuf:
make proto-gen - 清理生成文件:
make proto-clean
- 必须通过
gofmt(不要手工调整格式) - 建议使用
goimports自动整理 import(保持分组与排序) - 仅在文件已有非 ASCII 时引入非 ASCII;否则保持 ASCII
- 标准库、第三方、项目内包分为 3 组
- 组内按字母序排列
- 项目内包以
github.com/Aixtrade/TaskFlow/...路径引用
- 包名:小写单词,避免下划线
- 类型/结构体:
UpperCamelCase - 函数/方法:
UpperCamelCase(导出)或lowerCamelCase(非导出) - 变量:短小且语义明确;
ctx、cfg、err按 Go 习惯使用 - 错误变量:
ErrXxx作为哨兵错误(errors.New)
- 使用
zap.Logger(见internal/infrastructure/observability/logging) - 结构化字段:
zap.String/zap.Int等 - 关键流程打印 Info,异常打印 Error/Fatal
- 尽量返回原始错误或使用
fmt.Errorf("...: %w", err)包装 - 通过
errors.Is/errors.As判断错误类型 - 领域错误在
internal/domain/task/errors.go中集中管理 - 通用错误与包装类型在
pkg/errors中管理 - Worker 任务中:可用
asynq.SkipRetry表示不可重试错误
- DTO 放在
internal/interfaces/http/dto - JSON 字段使用 snake_case(见现有 struct tag)
- 输出时间格式通常为 RFC3339(示例见
TaskInfo.NextProcessAt)
- Command / Query 定义在
internal/application/task - Handler 仅负责解析请求、验证参数、调用 Service
- Service 处理业务逻辑与依赖调用
- Domain 实体与验证逻辑放在
internal/domain
- Handler 放在
internal/worker/handlers/<task> Type()返回tasktype.Xxx.String()- 使用
worker.UnmarshalPayload[T]解析 payload - 注册在
cmd/server/main.go
- 配置入口:
internal/config(Viper) - 默认使用
configs/config.dev.yaml进行本地开发 - 环境变量以
TASKFLOW_前缀覆盖
cmd/:应用入口internal/application/:应用服务、命令与查询internal/domain/:领域模型与接口internal/infrastructure/:外部依赖实现(Redis/Asynq/日志/监控)internal/interfaces/:HTTP 接口、路由、DTO、中间件internal/worker/:任务处理器、注册表、中间件pkg/:可复用的公共包
- 新增任务类型请同步修改:
pkg/tasktype/types.gopkg/payload/<task>.gointernal/worker/handlers/<task>/handler.gocmd/server/main.go(注册 handler)
- 未发现
.cursor/rules/、.cursorrules或.github/copilot-instructions.md