← ClaudeAtlas

golisted

Expert Go programming skill authored by spf13 (former Go team lead, author of Cobra, Viper, Hugo, Afero). Covers idiomatic Go — package design, error handling, interfaces, concurrency, testing, and project layout. Use when writing, reviewing, or refactoring any Go code.
chafingdishposition355/go-skills · ★ 1 · AI & Automation · score 64
Install: claude install-skill chafingdishposition355/go-skills
# Idiomatic Go: The Go Way Idiomatic Go patterns and best practices for building robust, efficient, and maintainable applications. ## When to Activate - Writing new Go code - Reviewing or auditing existing Go code - Refactoring Go code (especially code that looks like Java/Spring Boot patterns in Go) - Designing Go packages, modules, or APIs - Choosing between stdlib and third-party libraries - Any question about Go project structure, error handling, concurrency, or testing ## Core Principles ### 1. Clear is Better than Clever Go favors readability and simplicity over abstraction and cleverness. Code should be obvious. If you have to read a function three times to understand its control flow, it needs to be rewritten. ```go // Idiomatic: Direct, linear control flow func GetUser(id string) (*User, error) { user, err := db.FindUser(id) if err != nil { return nil, fmt.Errorf("finding user %s: %w", id, err) } return user, nil } ``` ### 2. Make the Zero Value Useful Design types so their zero value is immediately usable without initialization. This eliminates boilerplate constructors. `sync.Mutex` and `bytes.Buffer` are the gold standard for this. ```go // Idiomatic: Ready to use immediately type Counter struct { mu sync.Mutex count int } func (c *Counter) Inc() { c.mu.Lock() c.count++ c.mu.Unlock() } ``` ### 3. Return Early, Keep the Happy Path Left Handle errors and edge cases immediately and return. Do not use `else` b