go
network_error
ai_generated
true
警告:数据竞争:协程X写入,协程Y读取(http.Handler)
WARNING: DATA RACE: Write by goroutine X, Read by goroutine Y (http.Handler)
ID: go/goroutine-http-server-race
80%修复率
88%置信度
0证据数
2025-11-15首次发现
版本兼容性
| 版本 | 状态 | 引入 | 弃用 | 备注 |
|---|---|---|---|---|
| 1.0 | active | — | — | — |
| 1.21 | active | — | — | — |
根因分析
多个HTTP处理程序协程在没有同步的情况下访问共享状态。
English
Multiple HTTP handler goroutines accessing shared state without synchronization.
解决方案
-
95% 成功率 Use local variables within handler
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { var counter int counter++ fmt.Fprintf(w, "%d", counter) }) -
90% 成功率 Use sync.Mutex for shared state
var mu sync.Mutex var counter int http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { mu.Lock() counter++ mu.Unlock() fmt.Fprintf(w, "%d", counter) })
无效尝试
常见但无效的做法:
-
Using global variables for request state
90% 失败
Global variables are shared across all requests; race condition.
-
Using request-scoped variables incorrectly
70% 失败
If variable is captured by closure, it may be shared.