Go Fractals CLI 实现计划
Go Fractals CLI 是一个基于 Go 语言开发、用于生成 ASCII 分形图案的命令行工具,本页面记录了该工具的分步实现计划。
摘要
本计划基于 superpowers:subagent-driven-development 技能推进,将 Go Fractals CLI 的开发拆解为10个顺序执行的任务,覆盖项目初始化、框架搭建、核心算法实现、命令行集成、功能完善、测试验证和文档编写全流程,每个任务都明确了开发要求与验证标准。
上下文
项目目标为构建可生成ASCII分形的命令行工具,完整规格定义参考 design.md 文件,开发使用Go语言,基于Cobra框架实现CLI结构。
任务列表与要求
Task 1:项目初始化
- 开发要求:
- 初始化Go模块,模块名为
github.com/superpowers-test/fractals - 创建目录结构:
cmd/fractals/、internal/sierpinski/、internal/mandelbrot/、internal/cli/ - 创建最简
cmd/fractals/main.go,输出内容fractals cli - 添加
github.com/spf13/cobra依赖
- 初始化Go模块,模块名为
- 验证标准:
go build ./cmd/fractals构建成功,运行./fractals输出fractals cli
Task 2:带帮助功能的CLI框架
- 开发要求:
- 在
internal/cli/root.go中创建根命令 - 配置帮助文本,展示所有可用子命令
- 将根命令接入
main.go
- 在
- 验证标准:
./fractals --help显示用法,列出sierpinski和mandelbrot两个可用命令;无参数运行./fractals默认显示帮助
Task 3:谢尔宾斯基三角形算法实现
- 开发要求:
- 创建
internal/sierpinski/sierpinski.go - 实现
Generate(size, depth int, char rune) []string方法,返回三角形的所有行文本 - 使用递归中点细分算法实现
- 创建
internal/sierpinski/sierpinski_test.go,添加测试用例:尺寸4深度2的小三角形匹配预期输出;尺寸1返回单个字符;深度0返回实心三角形
- 创建
- 验证标准:
go test ./internal/sierpinski/...所有测试通过
Task 4:谢尔宾斯基功能CLI集成
- 开发要求:
- 在
internal/cli/sierpinski.go中创建sierpinski子命令 - 添加参数标记:
--size(默认值32)、--depth(默认值5)、--char(默认值*) - 调用
Generate方法生成结果并输出到标准输出
- 在
- 验证标准:
./fractals sierpinski可输出三角形;指定--size 16 --depth 3可输出更小三角形;./fractals sierpinski --help显示参数文档
Task 5:曼德博集合算法实现
- 开发要求:
- 创建
internal/mandelbrot/mandelbrot.go - 实现
Render(width, height, maxIter int, char string) []string方法 - 将复平面区域(实轴-2.5到1.0、虚轴-1.0到1.0)映射到输出尺寸
- 将迭代次数映射到字符梯度
" .:-=+*#%@",指定字符时使用单个字符渲染 - 创建
internal/mandelbrot/mandelbrot_test.go,添加测试用例:输出尺寸匹配请求的宽高;集合内已知点(0,0)映射到最大迭代对应字符;集合外已知点(2,0)映射到低迭代对应字符
- 创建
- 验证标准:
go test ./internal/mandelbrot/...所有测试通过
Task 6:曼德博集合功能CLI集成
- 开发要求:
- 在
internal/cli/mandelbrot.go中创建mandelbrot子命令 - 添加参数标记:
--width(默认80)、--height(默认24)、--iterations(默认100)、--char(默认空字符串) - 调用
Render方法生成结果并输出到标准输出
- 在
- 验证标准:
./fractals mandelbrot可输出可识别的曼德博集合;指定--width 40 --height 12可输出更小版本;./fractals mandelbrot --help显示参数文档
Task 7:字符配置统一化
- 开发要求:
- 验证谢尔宾斯基命令的
--char参数可正确将字符传入算法 - 曼德博集合命令的
--char指定字符时,使用单个字符替代梯度字符渲染 - 添加自定义字符输出的测试用例
- 验证谢尔宾斯基命令的
- 验证标准:
./fractals sierpinski --char '#'使用#字符渲染;./fractals mandelbrot --char '.'对所有填充点使用.;所有测试通过
Task 8:输入验证与错误处理
- 开发要求:
- 谢尔宾斯基命令:要求
size > 0、depth >= 0 - 曼德博集合命令:要求
width/height > 0、iterations > 0 - 对非法输入返回清晰的错误信息
- 添加错误场景的测试用例
- 谢尔宾斯基命令:要求
- 验证标准:
./fractals sierpinski --size 0打印错误并以非零状态退出;./fractals mandelbrot --width -1打印错误并以非零状态退出;错误信息清晰有用
Task 9:集成测试
- 开发要求:
- 创建
cmd/fractals/main_test.go或test/integration_test.go - 添加两个命令的完整CLI调用测试
- 验证输出格式和退出码
- 验证错误场景返回非零退出码
- 创建
- 验证标准:
go test ./...运行所有测试(包含集成测试)全部通过
Task 10:编写README文档
- 开发要求:创建
README.md,包含:项目描述、安装方式go install ./cmd/fractals、两个命令的使用示例、小样例输出 - 验证标准:README准确描述工具、文档中的示例可正常运行
执行要求
本计划需要使用superpowers:subagent-driven-development技能执行。