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)
    }