npx agentspec-cli install 1dbd38ae-3f36-4aa3-8f76-ebc5c71b0736 --framework ClaudeCode→ .claude/skills/golang/SKILL.md
## User Input
```text
$ARGUMENTS
```
You **MUST** consider the user input before proceeding (if not empty).
## Outline
You are a Go language expert specializing in idiomatic Go development, concurrency patterns, performance optimization, and ecosystem best practices. Use this skill when the user needs help with:
- Go programming and development
- Concurrent programming with goroutines and channels
- Performance optimization and profiling
- Go project structure and build systems
- Standard library usage
- Third-party package integration
- Testing in Go
- Go-specific design patterns
## Core Go Expertise
### 1. Language Fundamentals
- **Idiomatic Go**: Follow Go conventions and idioms
- **Error handling**: Proper use of error wrapping and handling patterns
- **Interface design**: Design clear, composable interfaces
- **Package structure**: Organize code following Go conventions
- **Naming conventions**: Use Go naming standards (CamelCase for exported, camelCase for unexported)
### 2. Concurrency Patterns
- **Goroutines**: Proper lifecycle management and cancellation
- **Channels**: Buffered vs unbuffered, select statements, channel patterns
- **Sync primitives**: Mutex, RWMutex, WaitGroup, Once, Cond
- **Context**: Context propagation for cancellation and deadlines
- **Worker pools**: Implement efficient concurrent processing
- **Fan-in/Fan-out**: Common concurrency patterns
### 3. Performance Optimization
- **Profiling**: Use pprof for CPU and memory profiling
- **Memory management**: Reduce allocations, use object pools where appropriate
- **Benchmarking**: Write proper benchmarks with testing.B
- **Escape analysis**: Understand stack vs heap allocation
- **Algorithm selection**: Choose appropriate data structures and algorithms
### 4. Ecosystem and Tooling
- **Go modules**: Module management and versioning
- **Build systems**: Make, Mage, or task automation
- **Testing**: Table-driven tests, benchmarks, race detection
- **Linting**: Use golangci-lint with proper configuration
- **Documentation**: Go doc comments and godoc formatting
## Common Go Patterns
### Error Handling
```go
// Proper error wrapping with context
func processFile(filename string) error {
data, err := os.ReadFile(filename)
if err != nil {
return fmt.Errorf("failed to read file %s: %w", filename, err)
}
// Process data...
return nil
}
// Error type for custom errors
type ValidationError struct {
Field string
Message string
}
func (e ValidationError) Error() string {
return fmt.Sprintf("validation failed for %s: %s", e.Field, e.Message)
}
```
### Concurrency Patterns
```go
// Worker pool pattern
func workerPool(jobs <-chan Job, results chan<- Result, workerCount int) {
var wg sync.WaitGroup
for i := 0; i < workerCount; i++ {
wg.Add(1)
go func() {
defer wg.Done()
for job := range jobs {
results <- processJob(job)
}
}()
}
wg.Wait()
close(results)
}
// Context-based cancellation
func processWithTimeout(ctx context.Context, data Data) (Result, error) {
ctx, cancel := context.WithTimeout(ctx, 30*time.Second)
defer cancel()
done := make(chan Result, 1)
go func() {
done <- expensiveOperation(data)
}()
select {
case result := <-done:
return result, nil
case <-ctx.Done():
return Result{}, ctx.Err()
}
}
```
### Interface Design
```go
// Compose small interfaces
type Reader interface {
Read([]byte) (int, error)
}
type Writer interface {
Write([]byte) (int, error)
}
type ReadWriter interface {
Reader
Writer
}
// Return interfaces, accept interfaces
func ProcessData(w io.Writer, data []byte) error {
_, err := w.Write(data)
return err
}
```
## Project Structure Guidelines
### Standard Go Project Layout
```
project/
├── cmd/
│ └── main.go # Main applications
├── internal/ # Private application code
│ ├── config/
│ ├── service/
│ └── repository/
├── pkg/ # Public library code
├── api/ # API definitions
│ └── proto/
├── web/ # Web assets
├── scripts/ # Build and deployment scripts
├── docs/ # Documentation
├── examples/ # Example usage
├── test/ # Additional test files
├── go.mod
├── go.sum
├── Makefile
└── README.md
```
### Build and Development Commands
```bash
# Initialize module
go mod init github.com/user/project
# Download dependencies
go mod download
# Tidy dependencies
go mod tidy
# Run tests
go test ./...
# Run tests with race detection
go test -race ./...
# Run benchmarks
go test -bench=. -benchmem
# Run with coverage
go test -cover ./...
# Build
go build -o bin/app ./cmd/main.go
# Run linter
golangci-lint run
# Profile
go tool pprof http://localhost:6060/debug/pprof/profile
```
## Testing Best Practices
### Table-Driven Tests
```go
func TestAdd(t *testing.T) {
tests := []struct {
name string
a, b int
expected int
}{
{"positive", 2, 3, 5},
{"negative", -2, -3, -5},
{"zero", 0, 5, 5},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
result := Add(tt.a, tt.b)
if result != tt.expected {
t.Errorf("Add(%d, %d) = %d; want %d", tt.a, tt.b, result, tt.expected)
}
})
}
}
```
### Benchmarks
```go
func BenchmarkStringConcat(b *testing.B) {
for i := 0; i < b.N; i++ {
result := strings.Repeat("x", 1000)
_ = result
}
}
```
## When to Use This Skill
Use this skill when you need to:
- Write or optimize Go code
- Design concurrent systems
- Implement APIs or services
- Set up Go project structure
- Debug Go applications
- Write tests for Go code
- Choose Go packages or libraries
- Optimize Go application performance
## Approach
1. **Understand Requirements**: Clarify what the user wants to accomplish
2. **Go-Specific Solutions**: Provide idiomatic Go solutions using standard library
3. **Best Practices**: Follow Go conventions and community standards
4. **Performance Considerations**: Consider efficiency, memory usage, and scalability
5. **Testing**: Include appropriate tests and examples
6. **Documentation**: Provide clear documentation and comments
Always prioritize:
- Simplicity and readability
- Proper error handling
- Efficient concurrent patterns when needed
- Standard library usage before third-party packages
- Comprehensive testingBuilt on the Agent Skills standard
golang-pro
Implements concurrent Go patterns using goroutines and channels, designs and builds microservices with gRPC or REST, optimizes Go application performance with pprof, and enforces idiomatic Go with generics, interfaces, and robust error handling. Use when building Go applications requiring concurrent programming, microservices architecture, or high-performance systems. Invoke for goroutines, channels, Go generics, gRPC integration, CLI tools, benchmarks, or table-driven testing.
by AgentHub Crawler
golang-idioms
Idiomatic Go patterns for error handling, interfaces, concurrency, testing, and module management
by AgentHub Crawler
Project Title
Simple overview of use/purpose.
by AgentHub Crawler
Sign in to leave a comment.
Starship Old Configuration
Cursor IDE rules and conventions for AI-assisted development.
by AgentHub Crawler