Skip to content

range-value-capture

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.

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