Go Patterns

This skill should be used for Go idioms, error handling, goroutines, interfaces, and testing, golang, Go language, Go modules, Go concurrency

majiayu000 Updated 567 repo stars

File contents

Go Patterns

Idiomatic Go patterns for Go 1.21+.

Error Handling

if err != nil {
    return fmt.Errorf("failed to process %s: %w", id, err)
}

Interfaces

Small interfaces (1-3 methods). Accept interfaces, return structs.

type Reader interface {
    Read(p []byte) (n int, err error)
}

Table-Driven Tests

tests := []struct{
    name string
    input, want int
}{
    {"positive", 2, 3},
}
for _, tt := range tests {
    t.Run(tt.name, func(t *testing.T) {
        if got := Fn(tt.input); got != tt.want {
            t.Errorf("got %d, want %d", got, tt.want)
        }
    })
}

Concurrency

Always propagate context for cancellation:

func work(ctx context.Context) error {
    select {
    case <-ctx.Done():
        return ctx.Err()
    default:
        // do work
    }
}

Defer for Cleanup

f, err := os.Open(path)
if err != nil { return err }
defer f.Close()

majiayu000/claude-skill-registry-data/tree/main/data/go-patterns commit 235e665ae8

Frequently asked questions

npx skillmds@latest add majiayu000/go-patterns