golang

Write clean, concurrent, idiomatic Go code.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "golang" with this command: npx skills add htlin222/dotfiles/htlin222-dotfiles-golang

Go Development

Write clean, concurrent, idiomatic Go code.

When to Use

  • Writing Go code

  • Concurrency patterns

  • Performance optimization

  • Interface design

  • Go module management

Go Patterns

Concurrency

// Worker pool pattern func workerPool(jobs <-chan Job, results chan<- Result, workers int) { var wg sync.WaitGroup for i := 0; i < workers; i++ { wg.Add(1) go func() { defer wg.Done() for job := range jobs { results <- process(job) } }() } wg.Wait() close(results) }

// Context for cancellation func fetchWithTimeout(ctx context.Context, url string) ([]byte, error) { ctx, cancel := context.WithTimeout(ctx, 5*time.Second) defer cancel()

req, _ := http.NewRequestWithContext(ctx, "GET", url, nil)
resp, err := http.DefaultClient.Do(req)
if err != nil {
    return nil, err
}
defer resp.Body.Close()
return io.ReadAll(resp.Body)

}

Error Handling

// Custom errors with context type ValidationError struct { Field string Message string }

func (e *ValidationError) Error() string { return fmt.Sprintf("%s: %s", e.Field, e.Message) }

// Error wrapping if err != nil { return fmt.Errorf("failed to process user %d: %w", userID, err) }

Interfaces

// Small, focused interfaces type Reader interface { Read(p []byte) error }

type Writer interface { Write(p []byte) error }

// Composition type ReadWriter interface { Reader Writer }

Project Structure

project/ ├── cmd/ │ └── app/ │ └── main.go ├── internal/ │ ├── handler/ │ └── service/ ├── pkg/ │ └── utils/ ├── go.mod └── go.sum

Testing

func TestProcess(t *testing.T) { tests := []struct { name string input string want string wantErr bool }{ {"valid input", "hello", "HELLO", false}, {"empty input", "", "", true}, }

for _, tt := range tests {
    t.Run(tt.name, func(t *testing.T) {
        got, err := Process(tt.input)
        if (err != nil) != tt.wantErr {
            t.Errorf("error = %v, wantErr %v", err, tt.wantErr)
        }
        if got != tt.want {
            t.Errorf("got %v, want %v", got, tt.want)
        }
    })
}

}

Best Practices

  • Prefer composition over inheritance

  • Keep interfaces small (1-3 methods)

  • Handle errors explicitly

  • Use context for cancellation

  • Avoid global state

Examples

Input: "Add concurrency to this" Action: Identify parallel work, add goroutines with proper sync, handle errors

Input: "Review this Go code" Action: Check error handling, interface design, concurrency safety

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

devops

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

python

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

code-review

No summary provided by upstream source.

Repository SourceNeeds Review