← ClaudeAtlas

golang-patternslisted

用于构建健壮、高效且可维护的Go应用程序的惯用Go模式、最佳实践和约定。
Edward-H26/OnePromptClaudeCode · ★ 5 · Data & Documents · score 64
Install: claude install-skill Edward-H26/OnePromptClaudeCode
# Go 开发模式 用于构建健壮、高效和可维护应用程序的惯用 Go 模式与最佳实践。 ## 何时激活 * 编写新的 Go 代码时 * 审查 Go 代码时 * 重构现有 Go 代码时 * 设计 Go 包/模块时 ## 核心原则 ### 1. 简洁与清晰 Go 推崇简洁而非精巧。代码应该显而易见且易于阅读。 ```go // Good: Clear and direct func GetUser(id string) (*User, error) { user, err := db.FindUser(id) if err != nil { return nil, fmt.Errorf("get user %s: %w", id, err) } return user, nil } // Bad: Overly clever func GetUser(id string) (*User, error) { return func() (*User, error) { if u, e := db.FindUser(id); e == nil { return u, nil } else { return nil, e } }() } ``` ### 2. 让零值变得有用 设计类型时,应使其零值无需初始化即可立即使用。 ```go // Good: Zero value is useful type Counter struct { mu sync.Mutex count int // zero value is 0, ready to use } func (c *Counter) Inc() { c.mu.Lock() c.count++ c.mu.Unlock() } // Good: bytes.Buffer works with zero value var buf bytes.Buffer buf.WriteString("hello") // Bad: Requires initialization type BadCounter struct { counts map[string]int // nil map will panic } ``` ### 3. 接受接口,返回结构体 函数应该接受接口参数并返回具体类型。 ```go // Good: Accepts interface, returns concrete type func ProcessData(r io.Reader) (*Result, error) { data, err := io.ReadAll(r) if err != nil { return nil, err } return &Result{Data: data}, nil } // Bad: Returns interface (hides implementation details unnecessarily) func ProcessData(r io.Reader) (io.Reader, error) { // ... } ``` ## 错误处理模式 ### 带上下文的错误包装 ```go