smithery/spjoshis

go-concurrency

Master Go concurrency with goroutines, channels, select, sync primitives, and patterns for building concurrent applications.

Installation

$ npx skills add smithery/spjoshis --skill go-concurrency

Similar popular skills

Related neighbors and high-traction skills in the same topics — useful to compare before installing.

Also in this package

Other skills from smithery/spjoshis.

npx skills add smithery/spjoshis

Browse all from smithery/spjoshis

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 1,823 B
  • docs SUMMARY.md 146 B

History

  1. First recorded snapshot · 0 installs

SKILL.md

Go Concurrency Patterns

Master Go's concurrency model with goroutines, channels, and synchronization for building efficient concurrent systems.

Core Patterns

Goroutines

func main() {
    go sayHello() // Launch goroutine

    time.Sleep(1 * time.Second) // Wait for goroutine
}

func sayHello() {
    fmt.Println("Hello from goroutine")
}

Channels

func main() {
    messages := make(chan string)

    go func() {
        messages <- "ping"
    }()

    msg := <-messages
    fmt.Println(msg)
}

Worker Pool

func worker(id int, jobs <-chan int, results chan<- int) {
    for j := range jobs {
        fmt.Println("worker", id, "processing job", j)
        time.Sleep(time.Second)
        results <- j * 2
    }
}

func main() {
    jobs := make(chan int, 100)
    results := make(chan int, 100)

    // Start workers
    for w := 1; w <= 3; w++ {
        go worker(w, jobs, results)
    }

    // Send jobs
    for j := 1; j <= 5; j++ {
        jobs <- j
    }
    close(jobs)

    // Collect results
    for a := 1; a <= 5; a++ {
        <-results
    }
}

Select Statement

select {
case msg1 := <-channel1:
    fmt.Println("Received", msg1)
case msg2 := <-channel2:
    fmt.Println("Received", msg2)
case <-time.After(1 * time.Second):
    fmt.Println("Timeout")
}

Best Practices

  1. Don't communicate by sharing memory; share memory by communicating
  2. Close channels from sender side
  3. Use buffered channels wisely
  4. Handle goroutine cleanup
  5. Use context for cancellation
  6. Avoid goroutine leaks

Resources