Skip to content
cccskills
FreePublished on GitHub

go-coding-standards

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

The English summary is being prepared. Showing the original description.

See how to install

Files included (1)

  • SKILL.md3.5 KB

SKILL.md (original)

Review the instructions the agent will receive before you install.

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 ./...     # 全部通过

Reviews

No reviews yet. Tell others what you thought.

Comments

No login needed. Share how it worked for you, ask a question, or note where it did not run.

No comments yet. Be the first to write one.

Comments are published right away. Do not include personal information such as email addresses or phone numbers. Up to 2 URLs.

0 / 1,000 characters

This form is protected by reCAPTCHA, and the Google Privacy Policy and Terms of Service apply.

More skills from this repository

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

The English summary is being prepared. Showing the original description.

ZhangShenao/harness9142Updated Oct 19, 2026

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

The English summary is being prepared. Showing the original description.

ZhangShenao/harness9142Updated Oct 19, 2026

commit

Free

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.

The English summary is being prepared. Showing the original description.

ZhangShenao/harness9142Updated Oct 19, 2026

cr

Free

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.

The English summary is being prepared. Showing the original description.

ZhangShenao/harness9142Updated Oct 19, 2026

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

The English summary is being prepared. Showing the original description.

ZhangShenao/harness9142Updated Oct 19, 2026

pr

Free

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.

The English summary is being prepared. Showing the original description.

ZhangShenao/harness9142Updated Oct 19, 2026

See all skills by ZhangShenao

Report a problem with this skill