go race検出
3773 ワード
一般的に同時発生するバグは2種類あり,デッドロックと競合(race)である.デッドロックが発生するとgo runは と直接エラーを報告します. raceが発生した場合、raceを追加するには、タイムズwarning が実行されます.
次のようにします.
コード#コード#
go run xxx.go
の後に-race
のパラメータを追加次のようにします.
$ go run -race race.go
==================
WARNING: DATA RACE
Write at 0x00c0000a2000 by goroutine 6:
main.main.func2()
/Users/harryhare/git/go_playground/src/race.go:15 +0x38
Previous write at 0x00c0000a2000 by goroutine 5:
main.main.func1()
/Users/harryhare/git/go_playground/src/race.go:9 +0x38
Goroutine 6 (running) created at:
main.main()
/Users/harryhare/git/go_playground/src/race.go:13 +0x9c
Goroutine 5 (running) created at:
main.main()
/Users/harryhare/git/go_playground/src/race.go:7 +0x7a
==================
コード#コード#
package main
import "time"
func main(){
var x int
go func(){
for{
x=1
}
}()
go func(){
for{
x=2
}
}()
time.Sleep(100*time.Second)
}