为什么我的go build -race main.go生成的可执行文件main.exe无任何输出
1. 运行环境
go version go1.21.0 windows/amd64> (当前使用的Go
版本,及系统版本、系统架构?)
编译工具:vscode 1.82.1
2. 问题描述?
package main
import (
“fmt”
“sync”
“time”
)
var m = make(map[int]int, 0)
var wg sync.WaitGroup
func test(num int) {
var sum = 1
for i := 1; i <= num; i++ {
sum *= i
}
m[num] = sum
fmt.Println(m)
time.Sleep(time.Millisecond)
wg.Done()
}
func main() {
for i := 1; i <= 200; i++ {
wg.Add(1)
go test(i)
}
wg.Wait()
}
//上述代码发生了资源竞争的情况,我想用go build -race 追踪竞争的情况
3. 您期望得到的结果?
我期望执行go build -race main.go命令后,vscode的终端显示如下图所示的提示信息:
4. 您实际得到的结果?
但实际上我执行go build -race main.go命令后,虽然生成了main.exe可执行文件,但是执行main.exe文件无任何输出。
但是我执行go run main.go命令后,是有如下错误提示的:
fatal error: concurrent map writes
map[2:0 3:6]
fatal error: concurrent map writes
另外,我执行go build main.go命令后,执行生成main.exe文件编译器也会给出相应的提示,唯独执行go build -race main.go命令后,执行生成main.exe文件编译器无任何提示输出。
针对这个问题,我已做了如下尝试:
1、更换MinGW-w64源,现在安装的是x86_64-8.1.0-release-win32-sjlj-rt_v6-rev0版本
2、查看资料,了解vscode是否需要配置gcc环境,但从搜索结果来看,并没有说需要配置gcc环境的帖子
电脑重启一下看看
需要加锁访问
官方文档:
需要 C 编译器,需要 mingw-w64 v8 或以上。