一尘不染

如何检查运行时是否启用了竞赛检测器?

go

有什么方法可以检查Go程序是否-race在运行时启用了编译功能(例如,用于日志记录/信息目的)?

我检查了文档以及明显的位置(runtime/*),但找不到任何东西。


阅读 195

收藏
2020-07-02

共1个答案

一尘不染

据我所知,没有对此的简单检查,但是-race启用了race
build标签后,您就可以利用它了。

我创建了一个新目录israce,并在其中放置了两个文件:

israce/race.go

// +build race

// Package israce reports if the Go race detector is enabled.
package israce

// Enabled reports if the race detector is enabled.
const Enabled = true

israce/norace.go

// +build !race

// Package israce reports if the Go race detector is enabled.
package israce

// Enabled reports if the race detector is enabled.
const Enabled = false

由于使用了build标签,将仅编译两个文件之一。

这也是围棋标准库是怎么做的(race.gonorace.go),但由于这是一个内部包不能导入的围棋源基地之外。

2020-07-02