golang 条件编译控制

h6.jpeg

在 xxx.go 文件开头添加代码 //go:build debug

✅ 不加 //go:build debug 的文件 → 永远会被编译(默认行为)
✅ 加了 //go:build debug 的文件 → 「默认不编译」,只有运行编译命令时手动加 -tags debug 才会编译

通俗解释

  1. 加了这个注释的文件,默认是被忽略的,生产打包go build/go run 完全不会包含它;
  2. 只有写命令:go run -tags debug xxx.go 或 go build -tags debug xxx.go,这个文件才会被编译进去;
  3. 反向用法: //go:build !debug → 意思是「只有不加 debug 标签编译时,这个文件才生效」,注意有个!

例如

情况 1:你的文件第一行写了 //go:build debug

  • 执行 go run main.go → 这个文件不参与编译(被跳过)
  • 执行 go run -tags debug main.go → 这个文件参与编译

情况 2:你的文件没写这个注释

  • 不管执行 go run main.go 还是 go run -tags debug main.go → 都会编译这个文件

使用vscode系列编辑器时,用到了 gopls 语言服务器,默认会报下面的警告提示

No packages found for open file D:\site\zero-core\search\tree_debug.go. This file may be excluded due to its build tags; try adding "-tags=<build tag>" to your gopls "buildFlags" configuration See the documentation for more information on working with build tags: https://github.com/golang/tools/blob/master/gopls/doc/settings.md#buildflags. go list

settings.json 配置中,json第一层添加如下配置即可

"gopls": {
  "buildFlags": ["-tags=debug"]
}
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 在C/C++中可以通过宏定义实现条件编译,比如在不同平台的机器上,调用不同的函数,或者通过编译是传递参数,调用不同...
    QxQx阅读 1,128评论 0赞 4
  • build tag允许进行有限的条件编译,即根据某些条件编译不同版本的代码。 标签是在每个文件的顶部指定的,然后是...
    asdzxc阅读 1,972评论 0赞 0
  • Go 编译时插桩 Go 语言的编译时插桩是一种在编译阶段自动注入监控代码的技术,目的是在不修改业务代码的情况下,实...
    可观测性技术阅读 187评论 0赞 0
  • 条件编译 在文件开始的位置package语句之前,使用// +build可以添加编译标签,以满足不同场景不同编译的...
    如雨随行2020阅读 375评论 0赞 0
  • go get go get为当前开发的模块解析并添加依赖,然后构建并安装依赖。 添加依赖 上策:查找最新的打标签的...
    SunnyTeng阅读 972评论 0赞 0

友情链接更多精彩内容