关于 go-skills
go-skills 为 LlamaFarm CLI 开发者提供 Go 编码指南,涵盖惯用、可维护和安全的实践,并附有核心工程主题的检查清单。
主要功能
- 01Go 错误处理与并发指南
- 02测试与安全检查清单
- 03惯用 Go 编码模式
- 04LlamaFarm CLI 代码约定
适用场景
- 01审查 LlamaFarm CLI 的 Go 代码变更
- 02统一错误处理与并发实践
- 03检查测试和安全做法
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ llama-farm/ llamafarm --skill go-skills安装后在 Claude Code 中输入/go-skills确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
concurrency.mderror-handling.mdpatterns.mdsecurity.mdtesting.md详细介绍
LlamaFarm CLI 的 Go 技能
适用于 LlamaFarm CLI 开发的通用 Go 最佳实践。这些指南可确保 Go 代码符合惯用写法、易于维护且安全。
技术栈
- Go 1.24+
- Cobra(CLI 框架)
- Bubbletea(TUI 框架)
- Lipgloss(终端样式)
目录结构
cli/
cmd/ # Command implementations
config/ # Configuration types and loading
orchestrator/ # Service management
utils/ # Shared utilities
version/ # Version and upgrade handling
internal/ # Internal packages
tui/ # TUI components
buildinfo/ # Build information
快速参考
错误处理
- 始终为错误添加上下文:
fmt.Errorf("operation failed: %w", err) - 对预期情况使用哨兵错误:
var ErrNotFound = errors.New("not found") - 函数调用后立即检查错误
并发
- 使用
sync.Mutex保护共享状态 - 读操作远多于写操作时,使用
sync.RWMutex - 使用通道在 goroutine 之间通信
- 始终使用
defer解锁互斥锁
测试
- 使用表驱动测试实现全面覆盖
- 使用接口以便模拟
- 测试文件名:同一包中的
*_test.go
安全
- 切勿记录凭据或令牌
- 在调试日志中隐藏敏感标头
- 验证所有外部输入
- 使用
context.Context取消操作
清单文件
| 文件 | 描述 |
|---|---|
| patterns.md | 符合 Go 惯用写法的模式 |
| concurrency.md | Goroutine、通道、同步 |
| error-handling.md | 错误包装、哨兵错误 |
| testing.md | 表驱动测试、模拟 |
| security.md | 输入验证、安全编码 |
值得牢记的 Go 谚语
- “不要通过共享内存来通信;要通过通信来共享内存”
- “错误是值”
- “少量复制胜过少量依赖”
- “清晰胜过巧妙”
- “设计架构,命名组件,记录细节”
此代码库中的常见模式
HTTP 客户端接口
type HTTPClient interface {
Do(req *http.Request) (*http.Response, error)
}
使用互斥锁管理进程
type ProcessManager struct {
mu sync.RWMutex
processes map[string]*ProcessInfo
}
Cobra 命令模式
var myCmd = &cobra.Command{
Use: "mycommand",
Short: "Brief description",
RunE: func(cmd *cobra.Command, args []string) error {
// Implementation
return nil
},
}
Bubbletea 模型模式
type myModel struct {
// State fields
}
func (m myModel) Init() tea.Cmd { return nil }
func (m myModel) Update(msg tea.Msg) (tea.Model, tea.Cmd) { /* ... */ }
func (m myModel) View() string { return "" }
评论
支持 Markdown