参考自 Golang 编译约束/条件编译 ( // +build )

对程序进行编译时,可能带一些条件(如不同平台、架构有不同的代码实现;或者debug,prod环境),让编译器只对满足条件的代码进行编译,将不满足条件的代码舍弃,这就是条件编译。 Go中,特称之为编译约束

进行编译约束的方式有2种分别:

  • 编译标签(build tag)
  • 文件后缀


编译标签(build tag)


下面演示一下 自定义标签:

1
2
3
4
├── go.mod
├── main.go
├── t_dev.go
└── t_prod.go

main.go:

1
2
3
4
5
6
7
8
9
10
package main

import (
"fmt"
)

func main() {
fmt.Println(GetType())

}

t_dev.go:

1
2
3
4
5
6
7
//go:build dev

package main

func GetType() string {
return "这是dev"
}

t_prod.go:

1
2
3
4
5
6
7
//go:build prod

package main

func GetType() string {
return "这是prod"
}

完整代码

Golang的条件编译参数-tags解决项目的debug模式


在很多开源项目中都有广泛使用,例如go-zero:


//go:build// +build指令之间有什么区别?


文件后缀



相关博客:

go build可选的那些参数