mirror of
https://github.com/Crocmagnon/fatcontext.git
synced 2024-11-12 19:23:58 +01:00
31 lines
523 B
Markdown
31 lines
523 B
Markdown
|
# foreshadow
|
||
|
|
||
|
`foreshadow` is a Go linter which detects un-shadowed contexts in loops.
|
||
|
They can lead to performance issues, as documented here: https://gabnotes.org/fat-contexts/
|
||
|
|
||
|
## Example
|
||
|
|
||
|
```go
|
||
|
package main
|
||
|
|
||
|
import "context"
|
||
|
|
||
|
func ok() {
|
||
|
ctx := context.Background()
|
||
|
|
||
|
for i := 0; i < 10; i++ {
|
||
|
ctx := context.WithValue(ctx, "key", i)
|
||
|
_ = ctx
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func notOk() {
|
||
|
ctx := context.Background()
|
||
|
|
||
|
for i := 0; i < 10; i++ {
|
||
|
ctx = context.WithValue(ctx, "key", i) // "context not shadowed in loop"
|
||
|
_ = ctx
|
||
|
}
|
||
|
}
|
||
|
```
|