跳到正文
cccskills
免费在 GitHub 公开

go-coding-standards

Use when writing or reviewing Go code — explains harness9 project coding conventions and patterns

中文简介正在准备中。当前显示原文说明。

查看安装方法

包含的文件(1)

  • SKILL.md3.5 KB

SKILL.md(原文)

安装前可以查看交给 AI 代理的指令内容。

harness9 Go 编码规范

命名规范

类别规范示例
包名小写、单单词、无下划线engine、provider、schema
导出类型/函数PascalCaseAgentEngine、NewRegistry
未导出类型/函数camelCasemainLoop、runLoop
接口名以 -er 后缀为惯例Provider、Registry、BaseTool
常量PascalCase(导出)或 camelCase(未导出),不使用全大写RoleSystem、maxLogOutputLen
配置选项函数With 前缀WithMaxTurns、WithToolTimeout

错误处理

  • 显式检查所有 error 返回值,禁止 _ 忽略
  • 错误消息不以大写字母开头、不以句号结尾
  • 使用 fmt.Errorf("context: %w", err) 包装错误,保留错误链
// ✅ 正确
result, err := doSomething()
if err != nil {
    return fmt.Errorf("do something: %w", err)
}

// ❌ 错误
result, _ := doSomething()

构造函数

命名规范:New + 类型名

func NewReadFileTool(workDir string) *ReadFileTool {
    return &ReadFileTool{workDir: filepath.Clean(workDir)}
}

接口定义原则

接口定义在使用者侧,而非实现者侧。

// ✅ 正确:Registry 接口定义在 tools 包(使用者侧)
// internal/tools/registry.go
type Registry interface {
    Register(tool BaseTool) error
    GetAvailableTools() []schema.ToolDefinition
    Execute(ctx context.Context, call schema.ToolCall) schema.ToolResult
}

// ❌ 错误:不要在实现所在的包中定义接口

并发模式

并发工具执行使用预分配切片 + 索引写入,确保结果顺序:

// Go 1.22+ 中 for range 每次迭代已自动创建新绑定,无需手动传参捕获。
// 本项目使用 Go 1.25,以下写法是正确的:
results := make([]schema.ToolResult, len(toolCalls))
var wg sync.WaitGroup
for i, tc := range toolCalls {
    wg.Add(1)
    go func() {
        defer wg.Done()
        toolCtx, cancel := context.WithTimeout(ctx, e.toolTimeout)
        defer cancel()
        results[i] = e.registry.Execute(toolCtx, tc)
    }()
}
wg.Wait()

添加新工具的步骤

  1. 在 internal/tools/ 下创建 xxx.go,实现 BaseTool 接口
  2. 使用 safePath() 校验所有文件路径参数
  3. 在 internal/tools/xxx_test.go 中添加表驱动测试
  4. 在 cmd/harness9/main.go 中注册工具
type MyTool struct {
    workDir string
}

func (t *MyTool) Name() string { return "my_tool" }
func (t *MyTool) Definition() schema.ToolDefinition { /* JSON Schema */ }
func (t *MyTool) Execute(ctx context.Context, args json.RawMessage) (string, error) { /* ... */ }

测试规范

  • 使用标准库 testing 包,不引入第三方断言库
  • 表驱动测试优先
  • 运行:go test ./...
func TestXxx(t *testing.T) {
    cases := []struct {
        name  string
        input string
        want  string
    }{
        {"normal", "foo", "bar"},
        {"empty", "", ""},
    }
    for _, tc := range cases {
        t.Run(tc.name, func(t *testing.T) {
            got := Xxx(tc.input)
            if got != tc.want {
                t.Errorf("got %q, want %q", got, tc.want)
            }
        })
    }
}

代码检查

提交前必须通过:

gofmt -l .        # 无输出表示格式正确
go vet ./...      # 无 warning
go test ./...     # 全部通过

评价

还没有评价。欢迎分享你的使用感受。

评论

无需登录即可发表。欢迎分享使用感受、提问,或说明在哪些环境下无法运行。

还没有评论。来写第一条吧。

提交后会立即公开。请勿填写邮箱、电话等个人信息。URL 最多 2 个。

0 / 1000 字

此表单受 reCAPTCHA 保护,适用 Google 的隐私权政策和服务条款。

同一仓库的技能

Use when asked about harness9 architecture, module design, or how components interact — explains the system design

中文简介正在准备中。当前显示原文说明。

ZhangShenao/harness91422026年10月19日 更新

autodev

免费

Feature auto-development — clarify requirements, generate spec, dispatch dev sub-agent to implement and merge into current branch

中文简介正在准备中。当前显示原文说明。

ZhangShenao/harness91422026年10月19日 更新

commit

免费

Use when the user invokes /commit or asks to commit changes, after a code review has been completed and the changes are confirmed ready to stage and commit to git.

中文简介正在准备中。当前显示原文说明。

ZhangShenao/harness91422026年10月19日 更新

cr

免费

Use when the user invokes /cr, requests a code review, or before committing to verify correctness, security, and quality of new or modified code in the working tree.

中文简介正在准备中。当前显示原文说明。

ZhangShenao/harness91422026年10月19日 更新

Use when debugging Go errors, test failures, or unexpected behavior — step-by-step diagnosis approach

中文简介正在准备中。当前显示原文说明。

ZhangShenao/harness91422026年10月19日 更新

pr

免费

Use when the user invokes /pr or asks to push changes and open a pull request, after commits are ready to be pushed to a remote branch and merged into the main branch.

中文简介正在准备中。当前显示原文说明。

ZhangShenao/harness91422026年10月19日 更新

查看 ZhangShenao 的全部技能

报告此技能的问题