返回介绍

上卷 程序设计

中卷 标准库

下卷 运行时

源码剖析

附录

条件编译

发布于 2024-10-12 19:16:09 字数 1466 浏览 0 评论 0 收藏 0

支持以文件为单位的条件编译(conditional compilation)。

  • 在文件名添加后缀,比如 _linux_amd64.go
  • 在文件头部添加 //go:build linux && amd64 约束。

两种方式都支持所有源码文件,包括 .go、.s、.c 等。

在功能上重叠。优先使用文件名后缀,除非该文件对应多个平台或架构。

1. 名称后缀

文件名后缀支持 *_GOOS_GOARCH.go, *_GOOS.go, *_GOARCH.go 格式。

# 查看编译源码文件。

$ GOOS=linux go list -f {{.GoFiles}} ./mylib
[lib_linux.go]

$ GOOS=darwin go list -f {{.GoFiles}} ./mylib
[lib_darwin_amd64.go]

2. 编译约束

在源文件头部添加编译约束(build constraints, //go:build )。

  • 单个文件内只能有一条。
  • 必须在 package 声明之前
  • 支持运算符( &&||! )和括号。
// comment...
                             <-------- 建议有空行。
//go:build linux && amd64    <-------- 必须在 package 之前。
                             <-------- 建议有空行。
package mylib
//go:build (linux && 386) || (darwin && !cgo)
//go:build ignore    忽略
//go:build gccgo     编译器: gc 或 gccgo
//go:build go1.5     编译器最低版本

3. 自定义标记

通过命令行传入自定义标记。

//go:build debug && amd64
$ go build -tags "debug log"                      # 空格分隔多个标记。
$ go list -f {{.GoFiles}} -tags "debug" ./mylib   # 查看编译器所选择文件。

Build Constraints

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文