竞争检测
参考代码
package main
import (
"fmt"
"sync"
)
func main() {
wg := sync.WaitGroup{}
wg.Add(5)
for i := 0; i < 5; i++ {
// go func(i int) {
// defer wg.Done()
// fmt.Println("index:", i)
// }(i)
go func() {
defer wg.Done()
fmt.Println("index:", i)
}()
}
wg.Wait()
}
race 工具使用
go run --race main.go
效果
vet 工具使用
go vet main.go
说明
一个比较好的习惯是在写代码的时候就包含vet (可以方便ci阶段进行处理),参考Makefile,因为race 是在运行阶段检测的,vet 就会比较方便
但是注意vet并不是能解决所有问题,当然如果使用vscode 同时安装了推荐的golang 工具,一些常见的问题会自动提示的(内置调用了vet等工具)
all: vet
vet:
go vet ./
参考资料
https://golang.org/doc/articles/race_detector.html
https://golang.org/cmd/vet/