go/concurrency

Free catalog · v0.0.41

Reviews Go concurrency lifecycle, cancellation, synchronization, and channel ownership.

Checks

RuleSeverityScans for
go-concurrency.async-listener.missing-closeHighA type starts Serve/ListenAndServe in a direct goroutine, or passes a listener created by unshadowed standard-library net.Listen and its owned *http.Server.Serve callback at the exact parameter positions of a reachable, module-qualified local async helper, but has no reachable field-bound Close/Shutdown/Stop mechanism; unresolved, dead, shadowed, or reassigned relationships, synchronous helpers, process-lifetime main, tests, and helpers with a definitely active initiating listener-stop path stay quiet, while conditional or post-Serve cleanup does not count as shutdown ownership
go-concurrency.atomic-capacity-check-updateHighCapacity is checked and reserved in separate atomic operations
go-concurrency.cancellation-ownedMediumConcurrent work lacks cancellation ownership
go-concurrency.channel.self-deadlockHighChannel self-deadlock pattern
go-concurrency.concurrent-api.missing-testMediumConcurrent API guarantee lacks test for overlapping calls
go-concurrency.context.background-in-requestMediumAn operation replaces an available caller context with context.Background() or context.TODO()
go-concurrency.context.cancellationHighCancel function unused or context not derived
go-concurrency.context.error-classificationMediumContext-aware call errors treated as ordinary recoverable/reportable failures
go-concurrency.context.stored-on-structHighA struct field stores context.Context (or a same-file named alias of it)
go-concurrency.external-state-marker-before-successMediumA local success/ownership map entry is written after an external mutation whose error path falls through
go-concurrency.goroutine-id-state-keyMediumProduction mutable state is keyed by a goroutine identifier parsed from runtime.Stack text
go-concurrency.loopvar.captureMediumLoop variable captured by goroutine
go-concurrency.mutex.copyHighMutex / RWMutex copied by value
go-concurrency.rwmutex.read-lock-writeHighA changed receiver-owned map assignment or delete occurs while the same receiver holds a proven sync.RWMutex read lock; full write locks, local maps, unrelated locks, dead paths, tests, and unchanged legacy relationships stay quiet
go-concurrency.select.default-busyMediumBusy select with default in a tight loop
go-concurrency.ticker.not-stoppedMediumTicker not stopped
go-concurrency.timer.not-stoppedMediumTimer not stopped/drained
go-concurrency.waitgroup.copiedHighWaitGroup copied by value
go-concurrency.waitgroup.done-not-deferredHighA goroutine can return before its bare WaitGroup.Done call
go-concurrency.waitgroup.lifecycleHighWaitGroup Add/Done/Wait lifecycle race

More from the registry