[TOC] ## 概述 ``` a : 强制编译相关代码,不论它们的编译结果是否已是最新的 n : 打印编译过程中所需运行的命令,但不真正执行它们 p n: 并行编译,其中n为并行的数量,为cpu 核数 race: 检测并发不安全的变量 ``` ## 场景 ### 检测并发不安全的变量 <details> <summary>main.go</summary> ``` var a int go func() { a = 3 }() fmt.Println("a is ", a) time.Sleep(2 * time.Second) ``` </details> <br/> <details> <summary>go run -race test.go</summary> ``` a is 0 ================== WARNING: DATA RACE Write at 0x00c00006c068 by goroutine 7: main.main.func1() D:/go/demo/demo1/a.go:13 +0x3f Previous read at 0x00c00006c068 by main goroutine: main.main() D:/go/demo/demo1/a.go:15 +0x8f Goroutine 7 (running) created at: main.main() D:/go/demo/demo1/a.go:12 +0x81 ================== Found 1 data race(s) exit status 66 ``` </details> <br/> > 这个命令输出了Warning,告诉我们,goroutine5运行到第11行和main goroutine运行到13行的时候触发竞争了。 > 而且goroutine5是在第12行的时候产生的。