Use when idiomatic Go patterns, best practices, and conventions for building robust, efficient, and maintainable Go applications. Only for Go — not for other languages. Triggers on \"golang-patterns\", \"golang patterns\", \"patterns\".
Scanned 9/19/2026
Install to Claude Code
npx -y skills add majinmagros/magros.ai-skills --skill golang-patterns --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Golang Patterns?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/majinmagros-golang-patterns)More formats (shields.io, HTML) on the badges page.
---
name: golang-patterns
description: "Use when idiomatic Go patterns, best practices, and conventions for building robust, efficient, and maintainable Go applications. Only for Go — not for other languages. Triggers on \"golang-patterns\", \"golang patterns\", \"patterns\"."
metadata:
origin: ECC
---
# Go Development Patterns
Idiomatic Go patterns and best practices for building robust, efficient, and maintainable applications.
## When to Activate
- Writing new Go code
- Reviewing Go code
- Refactoring existing Go code
- Designing Go packages/modules
## When NOT to Use
- Other languages (use `python-patterns`, `rust-patterns`, `kotlin-patterns`, etc.)
- Go test strategy specifically (use `golang-testing`)
## Contents
| Topic | Reference |
|---|---|
| Core principles (simplicity, zero value, interfaces) | `references/core-principles.md` |
| Error handling (wrapping, custom types, Is/As) | `references/error-handling.md` |
| Concurrency (worker pool, context, errgroup) | `references/concurrency.md` |
| Interface design | `references/interfaces.md` |
| Package organization | `references/packages.md` |
| Struct design (options, embedding) | `references/structs.md` |
| Memory and performance | `references/performance.md` |
| Tooling (commands, golangci) | `references/tooling.md` |
## Quick Reference: Go Idioms
| Idiom | Description |
|-------|-------------|
| Accept interfaces, return structs | Functions accept interface params, return concrete types |
| Errors are values | Treat errors as first-class values, not exceptions |
| Don't communicate by sharing memory | Use channels for coordination between goroutines |
| Make the zero value useful | Types should work without explicit initialization |
| A little copying is better than a little dependency | Avoid unnecessary external dependencies |
| Clear is better than clever | Prioritize readability over cleverness |
| gofmt is no one's favorite but everyone's friend | Always format with gofmt/goimports |
| Return early | Handle errors first, keep happy path unindented |
## Anti-Patterns to Avoid
```go
// Bad: Naked returns in long functions
func process() (result int, err error) {
// ... 50 lines ...
return // What is being returned?
}
// Bad: Using panic for control flow
func GetUser(id string) *User {
user, err := db.Find(id)
if err != nil {
panic(err) // Don't do this
}
return userIs this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!