从 Shell 脚本到 Go 应用:使用 Kiro AI 助手完成 Harpoon 项目重构的完整实践

从 Shell 脚本到 Go 应用:使用 Kiro AI 助手完成 Harpoon 项目重构的完整实践

本文将详细记录我如何使用 Kiro AI 助手,将一个 Shell 脚本重构为功能完整的 Go 应用程序的全过程。适合想要了解 AI 辅助开发流程的开发者阅读。

文章目录

📖 背景介绍

项目起源

在云原生和 Kubernetes 环境中,容器镜像管理是一个常见但繁琐的任务。我之前写了一个名为 images.sh 的 Shell 脚本来批量处理多镜像的拉取、保存、加载和推送操作。虽然功能完整,但存在以下问题:

  • 跨平台兼容性差:只能在 Unix-like 系统上运行
  • 错误处理简陋:缺乏详细的错误信息和恢复机制
  • 配置管理困难:所有配置都硬编码在脚本中
  • 扩展性有限:添加新功能需要大量修改
  • 用户体验不佳:缺乏进度显示和友好的帮助信息

因此,我决定将其重构为一个现代化的 Go 应用程序,并将其命名为 Harpoon(寓意精准定位容器镜像管理的挑战)。

为什么选择 Kiro ?

在这个重构过程中,我选择了 Kiro AI 助手作为我的开发伙伴,原因如下:

  1. 专业的软件开发能力:Kiro 具备深厚的编程知识和最佳实践经验
  2. 结构化的开发流程:支持从需求分析到设计实现的完整开发周期
  3. 代码质量保证:能够生成符合工业标准的代码
  4. 实时协作:可以即时响应需求变更和问题解决

如何下载 kiro ?

这个产品 目前暂停了向所有用户开放注册或使用,你当前 不能立即下载或使用 Kiro,只能申请加入他们的候补名单,等待官方邀请你使用。

第三方下载地址https://www.techspot.com/downloads/7778-kiro.html

🎯 开发流程详解

下载安装好kiro后,下载自己在github创建的项目。

选择AI 辅助模式。这里选择适合编程开发的Spec模式。

第一阶段:需求分析与规格制定

1.1 创建项目规格

首先,我使用 Kiro 的 Spec 功能来系统化地分析需求:

bash 复制代码
# 在 Kiro 中创建新的规格
.kiro/specs/harpoon-go-rewrite/
├── requirements.md    # 需求文档
├── design.md         # 设计文档
└── tasks.md          # 任务列表

与 Kiro 的对话示例:

:这是我的项目harpoon,它目前的主要功能是用shell脚本实现批量管理容器镜像的脚本。我想将一个 Shell 脚本重构为 Go 应用,这个脚本用于管理容器镜像的拉取、保存、加载和推送操作。
Kiro:我来帮你创建一个完整的规格文档。首先让我分析你的需求并生成初始的需求文档...

Kiro 自动生成了详细的需求文档,包括:

  • 用户故事:以 "As a DevOps engineer, I want..." 的格式描述需求
  • 验收标准:使用 EARS 格式(Easy Approach to Requirements Syntax)
  • 技术约束:跨平台支持、性能要求等
1.2 需求迭代优化

通过与 Kiro 的多轮对话,我们不断完善需求:

markdown 复制代码
#### Acceptance Criteria
1. 当用户运行"hpn --version"时,系统应显示当前版本信息。
2. 当用户运行"hpn --help"时,系统应显示全面的使用信息。
3. 不能执行编译?
4. 等等各类报错,AI辅助解决。

这种结构化的需求描述确保了项目目标的清晰性和可测试性。

第二阶段:架构设计

2.1 系统架构设计

Kiro 帮我设计了一个模块化的架构:

bash 复制代码
cmd/hpn/                    # CLI 应用入口
internal/                   # 内部包
├── config/                 # 配置管理
├── runtime/               # 容器运行时实现
├── service/               # 业务逻辑服务
└── logger/                # 日志系统
pkg/                       # 公共包
├── types/                 # 数据结构和类型
└── errors/                # 自定义错误类型
2.2 接口设计

Kiro 设计了清晰的接口定义:

go 复制代码
type ContainerRuntime interface {
    Name() string
    IsAvailable() bool
    Pull(ctx context.Context, image string, options PullOptions) error
    Save(ctx context.Context, image string, tarPath string) error
    Load(ctx context.Context, tarPath string) error
    Push(ctx context.Context, image string, options PushOptions) error
}

这种接口设计使得系统可以轻松支持 Docker、Podman 和 Nerdctl 等不同的容器运行时。

第三阶段:任务分解与实现

3.1 任务列表生成

Kiro 将整个项目分解为 13 个主要任务,每个任务又包含多个子任务:

markdown 复制代码
- [ ] 1. Set up project structure and core interfaces
- [ ] 2. Implement configuration management system
- [ ] 3. Implement logging system
- [ ] 4. Implement container runtime detection and interfaces
- [ ] 5. Implement core image data models and utilities
...
- [ ] 13. Add comprehensive testing and validation
3.2 逐步实现

任务执行示例:

:开始执行任务 1.1 - 创建项目结构
Kiro:我来为你创建 Go 项目的基础结构...

Kiro 自动生成了完整的项目结构,包括:

go 复制代码
// go.mod
module github.com/harpoon/hpn

go 1.21

require (
    github.com/spf13/cobra v1.8.0
    github.com/spf13/viper v1.18.2
)
go 复制代码
// pkg/types/config.go
type Config struct {
    Registry string         `yaml:"registry" json:"registry"`
    Project  string         `yaml:"project" json:"project"`
    Proxy    ProxyConfig    `yaml:"proxy" json:"proxy"`
    Runtime  RuntimeConfig  `yaml:"runtime" json:"runtime"`
    // ...
}

第四阶段:核心功能实现

4.1 命令行接口设计

一个关键的挑战是保持与原始 Shell 脚本的兼容性。Kiro 帮我实现了完全兼容的命令行接口:

go 复制代码
// 原始 Shell 脚本命令
./images.sh -a pull -f images.txt --save-mode 2

// Go 版本命令(完全兼容)
hpn -a pull -f images.txt --save-mode 2
4.2 配置管理系统

Kiro 实现了一个强大的配置管理系统:

yaml 复制代码
# ~/.hpn/config.yaml
registry: registry.k8s.local
project: library
proxy:
  http: http://proxy.company.com:8080
  https: http://proxy.company.com:8080
  enabled: true
runtime:
  preferred: docker
  timeout: 5m

配置优先级:命令行参数 > 环境变量 > 配置文件 > 默认值

4.3 多运行时支持

Kiro 设计了一个优雅的运行时检测和适配系统:

go 复制代码
func detectContainerRuntime() (string, error) {
    // 按优先级检测:Docker -> Podman -> Nerdctl
    if _, err := exec.LookPath("docker"); err == nil {
        if err := exec.Command("docker", "version").Run(); err == nil {
            return "docker", nil
        }
    }
    // ... 其他运行时检测
}

第五阶段:问题解决与优化

5.1 构建问题解决

在开发过程中遇到了构建问题:

:执行 go build -o hpn cmd/hpn/main.go 报错 "undefined: rootCmd"
Kiro :这是因为你只构建了单个文件,而 rootCmd 定义在同包的其他文件中。正确的构建方式是:

bash 复制代码
go build -o hpn ./cmd/hpn

: 关于当前的版本写到是1.2 我想统一改为v1.0

Kiro 不仅解决了问题,还更新了所有相关文档中的构建命令。

5.2 跨平台构建

Kiro 帮我创建了完整的跨平台构建系统:

bash 复制代码
# Makefile
GOOS=linux GOARCH=amd64 go build -o hpn-linux-amd64 ./cmd/hpn
GOOS=linux GOARCH=arm64 go build -o hpn-linux-arm64 ./cmd/hpn
GOOS=darwin GOARCH=amd64 go build -o hpn-darwin-amd64 ./cmd/hpn
GOOS=darwin GOARCH=arm64 go build -o hpn-darwin-arm64 ./cmd/hpn
GOOS=windows GOARCH=amd64 go build -o hpn-windows-amd64.exe ./cmd/hpn

第六阶段:文档与发布准备

6.1 文档系统

提问:我现在准备发布v1.0到github,并且别人可以下载v1.0的二进制包,我需要做哪些准备和工作

Kiro 帮我创建了完整的文档系统:

复制代码
docs/
├── README.md          # 英文文档
├── README_CN.md       # 中文文档
└── Scripts_EN.md      # 原始脚本文档
6.2 发布自动化

Kiro 创建了完整的发布流程:

bash 复制代码
# release.sh - 自动构建所有平台的二进制文件
# pre-release-check.sh - 发布前检查
# install.sh - 用户安装脚本
# GitHub Actions 工作流 - 自动化发布

🚀 开发成果

功能对比

功能 Shell 脚本 Go 版本 (hpn)
性能 ⭐⭐ ⭐⭐⭐⭐⭐
错误处理 ⭐⭐ ⭐⭐⭐⭐⭐
跨平台支持 ⭐⭐ ⭐⭐⭐⭐⭐
配置管理 ⭐⭐ ⭐⭐⭐⭐⭐
用户体验 ⭐⭐⭐ ⭐⭐⭐⭐⭐

技术亮点

  1. 完全向后兼容:保持与原始脚本相同的命令行接口
  2. 多运行时支持:自动检测并适配 Docker、Podman、Nerdctl
  3. 配置管理:支持 YAML 配置文件和环境变量
  4. 跨平台:支持 Linux、macOS、Windows 多个平台和架构
  5. 错误处理:提供详细的错误信息和解决建议
  6. 并行处理:支持并发操作以提高性能

代码质量

  • 测试覆盖率:完整的单元测试和集成测试
  • 代码结构:清晰的模块化设计
  • 文档完整性:英文和中文双语文档
  • 发布流程:自动化的构建和发布流程

💡 Kiro 使用心得

优势体验

  1. 结构化开发:Kiro 的 Spec 功能帮助我系统化地分析需求和设计架构
  2. 代码质量:生成的代码符合 Go 最佳实践,包含完整的错误处理
  3. 问题解决:遇到技术问题时,Kiro 能快速定位并提供解决方案
  4. 文档生成:自动生成高质量的技术文档和用户手册
  5. 持续优化:在开发过程中不断优化设计和实现

最佳实践

  1. 明确需求:在开始编码前,花时间与 Kiro 讨论和完善需求
  2. 逐步实现:按照任务列表逐步实现,避免一次性处理过多功能
  3. 及时反馈:遇到问题及时与 Kiro 沟通,获得针对性的解决方案
  4. 文档同步:在开发过程中同步更新文档,确保信息一致性
  5. 测试验证:每个功能实现后及时测试验证

注意事项

  1. 需求表达:尽量详细和准确地描述需求,避免歧义
  2. 代码审查:虽然 Kiro 生成的代码质量很高,但仍需要人工审查
  3. 业务逻辑:复杂的业务逻辑需要人工参与设计和验证
  4. 性能优化:特定的性能优化可能需要结合实际场景调整

🎯 项目成果展示

安装使用

bash 复制代码
# 快速安装
curl -fsSL https://raw.githubusercontent.com/ghostwritten/harpoon/main/install.sh | bash

# 基本使用
hpn -a pull -f images.txt
hpn -a save -f images.txt --save-mode 2
hpn -a push -f images.txt -r registry.example.com -p myproject --push-mode 2

项目统计

  • 开发时间:约 2 周(兼职开发)
  • 代码行数:约 2000 行 Go 代码
  • 支持平台:5 个平台/架构组合
  • 功能特性:20+ 个主要功能
  • 文档页面:10+ 个文档文件

🔮 未来展望

基于这次成功的合作经验,我计划在未来的项目中继续使用 Kiro:

  1. 功能扩展:添加镜像签名验证、OCI 格式支持等高级功能
  2. 性能优化:基于用户反馈进行性能调优
  3. 生态集成:与 Kubernetes、Helm 等工具集成
  4. 社区建设:开源项目的社区运营和维护

📝 总结

通过这次与 Kiro 的合作开发,我深刻体会到了 AI 辅助开发的强大威力:

对个人开发者的价值

  1. 提升效率:大幅减少了重复性的编码工作
  2. 保证质量:生成的代码符合工业标准和最佳实践
  3. 学习机会:在合作过程中学习到了很多新的技术和方法
  4. 降低门槛:即使是复杂的系统设计也变得可以掌控

对项目成功的贡献

  1. 系统性思考:Spec 驱动的开发流程确保了项目的完整性
  2. 技术深度:实现了很多原本需要大量时间研究的技术细节
  3. 用户体验:生成了完整的文档和用户友好的安装脚本
  4. 可维护性:清晰的代码结构和完整的测试覆盖

给其他开发者的建议

  1. 拥抱 AI 工具:AI 不是要替代开发者,而是要增强开发者的能力
  2. 保持学习心态:在与 AI 合作的过程中持续学习新技术
  3. 注重沟通:清晰地表达需求和问题,获得更好的协作效果
  4. 验证和测试:AI 生成的代码仍需要人工验证和测试

🔗 相关链接


这篇文章记录了我使用 Kiro AI 助手完成 Harpoon 项目开发的完整过程。希望能为其他想要尝试 AI 辅助开发的朋友提供参考和启发。如果你有任何问题或想要交流经验,欢迎通过 GitHub 联系我!

标签:#AI辅助开发 #Go语言 #容器技术 #开源项目 #Kiro #云原生

相关推荐
IMER SIMPLE20 分钟前
人工智能-python-OpenCV 图像基础认知与运用-图像的预处理(1)
人工智能·python·opencv
盼小辉丶30 分钟前
图机器学习(17)——基于文档语料库构建知识图谱
人工智能·知识图谱·图机器学习
88号技师31 分钟前
2025年7月Renewable Energy-冬虫夏草优化算法Caterpillar Fungus Optimizer-附Matlab免费代码
开发语言·人工智能·算法·matlab·优化算法
DO_Community1 小时前
DigitalOcean 一键模型部署,新增支持百度开源大模型ERNIE 4.5 21B
人工智能·深度学习·百度·自然语言处理·开源
飞哥数智坊1 小时前
GPT-5:让 OpenAI CEO 眩晕的“天啊”时刻
人工智能
Python涛哥2 小时前
go语言基础教程:【1】基础语法:变量
开发语言·后端·golang
sssammmm3 小时前
AI入门学习-Python 最主流的机器学习库Scikit-learn
人工智能·python·机器学习
qq_436962183 小时前
奥威BI+AI数据分析解决方案:驱动企业数智化转型的智能引擎
人工智能·数据挖掘·数据分析
说私域3 小时前
开源链动2+1模式AI智能名片S2B2C商城小程序的场景体验分析
人工智能·小程序
青梅主码-杰哥3 小时前
中央广播电视总台联合阿里云研究院权威发布《中国人工智能应用发展报告(2025)》:我国依旧需要大力注重人工智能人才的培养
人工智能·阿里云·云计算