Skip to content

range-value-capture

Detect closures that capture reused range variables.

Updated View as Markdown

Default severity: warning

Before Go 1.22, variables declared by a range clause were reused across iterations. Variables assigned with = are still reused on every Go version. A closure that outlives an iteration can therefore observe a later value. Immediately invoked closures are accepted.

Bad

var value int
for _, value = range values {
	callbacks = append(callbacks, func() { use(value) })
}

Good

for _, value := range values {
	go func(current int) {
		use(current)
	}(value)
}
Navigation

Type to search…

↑↓ navigate↵ selectEsc close