⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

Go race检测:数据竞争排查

学习使用Go内置的竞态检测器(race detector)识别和修复并发程序中的数据竞争问题。 · 难度:入门 · +15XP

数据竞争与race检测

数据竞争发生在多个goroutine同时访问同一变量,且至少有一个是写操作时。Go的race检测器通过-race标志在运行时检测这些情况。

启用检测

go run -race main.go
go test -race ./...

典型示例

var counter int

func main() { for i := 0; i < 1000; i++ { go func() { counter++ // 数据竞争 }() } }

修复方法

方法示例
使用Mutexmu.Lock(); counter++; mu.Unlock()
使用原子操作atomic.AddInt64(&counter, 1)
使用channel通过channel传递值

检测器输出

当检测到竞争时,会打印goroutine栈追踪和变量地址,帮助定位问题。

练习提示

运行以下代码时加上-race标志,观察检测器输出。然后用Mutex修复它。

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 142 篇
0 完成
🔥 0