我可以使用os/arch注释指令等自定义构建标志

Swi*_*ftD 6 go

在golang中,我能够在文件的第一行注释中设置编译器指令,以确定该文件上的代码是否包含在基于OS或arch的构建中,例如

目标窗口:

// +build windows
Run Code Online (Sandbox Code Playgroud)

或非窗口:

// +build !windows
Run Code Online (Sandbox Code Playgroud)

有没有办法在构建时传入我自己的布尔变量以同样的方式操作?

背景是我想要一个布尔调试标志,我可以传入它来进行调试构建,我不希望我的调试代码包含在正常构建中.

我目前做这样的事情:

go build -ldflags "-X main.Debug=true"
Run Code Online (Sandbox Code Playgroud)

但我更喜欢使用第一行注释方法,因为这种方法不会忽略构建中的调试代码(我推测).

理想情况下我想:

调试on.go

// +build debug

package debug

func Debug() bool {
    return true
}
Run Code Online (Sandbox Code Playgroud)

debug-off.go

// +build !debug

package debug

func Debug() bool {
    return false
}
Run Code Online (Sandbox Code Playgroud)

更新RE重复 我接受相关问题具有相同的主题但它实际上不是一个重复的问题,这是一个已经知道这个功能但正在努力实现的人的问题.

我的2美分似乎相当于"人们在法国说什么语言?" vs"你怎么说'这不是一个重复'的法语?"

pet*_*rSO 7

命令去

Go是用于管理Go源代码的工具。

用法:

go command [arguments]
Run Code Online (Sandbox Code Playgroud)

编译软件包和依赖项

用法:

go build [-o output] [-i] [build flags] [packages]
Run Code Online (Sandbox Code Playgroud)

Build编译由导入路径命名的包及其依赖项,但不会安装结果。

构建标志由构建,清理,获取,安装,列出,运行和测试命令共享:

-tags 'tag list'
  a space-separated list of build tags to consider satisfied during the
  build. For more information about build tags, see the description of
  build constraints in the documentation for the `go/build` package.
Run Code Online (Sandbox Code Playgroud)

go/build 软件包:构建约束


例如,在源代码中,

// +build debug
Run Code Online (Sandbox Code Playgroud)

在运行时,为buildcleangetinstalllistrun,和test go命令,

$ go install -tags='debug'
Run Code Online (Sandbox Code Playgroud)