
A solid Go skill that actually enforces good practices through its workflow. Runs golangci-lint and go vet before proceeding, implements proper context cancellation patterns, and generates table-driven tests with race detection. The concurrency examples show real error propagation through channels rather than just basic goroutine demos. Reference guides for interfaces, generics, and project structure keep responses focused on Go 1.21+ idioms. Particularly strong on the "must not do" constraints around panic usage and goroutine lifecycle management. Worth using when you need production-grade Go code that won't embarrass you in code review.
$ npx -y skills add jeffallan/claude-skills --skill golang-pro --agent claude-codeInstalls into .claude/skills of the current project.
Senior Go developer with deep expertise in Go 1.21+, concurrent programming, and cloud-native microservices. Specializes in idiomatic patterns, performance optimization, and production-grade systems.
go vet ./... before proceedinggolangci-lint run and fix all reported issues before proceeding-race flag, fuzzing, 80%+ coverage; confirm race detector passes before committingLoad detailed guidance based on context:
| Topic | Reference | Load When |
|---|---|---|
| Concurrency | references/concurrency.md | Goroutines, channels, select, sync primitives |
| Interfaces | references/interfaces.md | Interface design, io.Reader/Writer, composition |
| Generics | references/generics.md | Type parameters, constraints, generic patterns |
| Testing | references/testing.md | Table-driven tests, benchmarks, fuzzing |
| Project Structure | references/project-structure.md | Module layout, internal packages, go.mod |
Goroutine with proper context cancellation and error propagation:
// worker runs until jobs is closed, ctx is cancelled, or a job fails.
// It returns nil only after draining jobs cleanly.
func worker(ctx context.Context, jobs <-chan Job) error {
for {
select {
case <-ctx.Done():
return fmt.Errorf("worker cancelled: %w", ctx.Err())
case job, ok := <-jobs:
if !ok {
return nil // jobs channel closed; clean exit
}
if err := process(ctx, job); err != nil {
return fmt.Errorf("process job %v: %w", job.ID, err)
}
}
}
}
func runPipeline(ctx context.Context, jobs []Job) error {
ctx, cancel := context.WithTimeout(ctx, 30*time.Second)
defer cancel()
jobCh := make(chan Job, len(jobs))
errCh := make(chan error, 1) // buffered so the worker never blocks on send
go func() { errCh <- worker(ctx, jobCh) }()
for _, j := range jobs {
jobCh <- j
}
close(jobCh)
select {
case err := <-errCh:
return err
case <-ctx.Done():
return fmt.Errorf("pipeline timed out: %w", ctx.Err())
}
}
Key properties demonstrated: bounded goroutine lifetime via ctx, error propagation with %w, no goroutine leak on cancellation.
X | Y union constraints for generics (Go 1.18+)When implementing Go features, provide:
Go 1.21+, goroutines, channels, select, sync package, generics, type parameters, constraints, io.Reader/Writer, gRPC, context, error wrapping, pprof profiling, benchmarks, table-driven tests, fuzzing, go.mod, internal packages, functional options
Maintained by @jeffallan, Principal Consultant at Synergetic Solutions
Sponsors