了解下 GO 的条件编译吧,针对不同的条件编译不同的文件,而最常用的就是选择不同系统编译。
所谓条件编译,简单来说,就是通过一个标注标识什么情况下进行编译,如在 linux 下编译的文件,在文件开头加上 +build linux 即可。
举个最简单的例子吧。
目标是根据不同的系统打印输出对应 Hello xxx,一种方式是通过 runtime.GOOS 获取当前的操作系统,这是常规的思路。当时为了演示条件编译,这里通过条件来控制。
首先是 main 函数,如下:
func main() {
hello()
}
现在要实现根据不同的系统调用不同 hello() 函数,创建三个文件,分别是 hello_linux.go、hello_windows.go 和 hello_darwin.go,通过指定编译条件标识在什么系统进行编译,如下:
hello_linux.go 如下:
// +build linux
package main
import (
"fmt"
)
func hello() {
fmt.Println("Hello Linux!")
}
hello_darwin.go 如下:
// +build darwin
package main
import "fmt"
func hello() {
fmt.Println("Hello Darwin!")
}
hello_windows.go,如下:
// +build windows
package main
import "fmt"
func hello() {
fmt.Println("Hello Windows!")
}
重点关注下 +build 之后的参数。我们执行如下命令:
go run .
因为我的系统是 macos,故打印结果如下:
Hello Darwin!
到此,是不是对条件编译的用户理解的差不多了,有兴趣去网上找几篇文章看看吧。+build 可以支持多个条件,与、或、非三种逻辑关系都是支持的。
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…