go-patterns
This skill should be used for Go idioms, error handling, goroutines, interfaces, and testing, golang, Go language, Go modules, Go concurrency
SKILL.md
Full skill instructions
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()
