我需要为不同的包同一个文件构建linux和windows
在Windows上我需要import github.com/hashicorp/go-syslog
和linux import log/syslog
并且文件中的内部代码我必须使用syslog.ALERT
或gsyslog.ALERT
,具体取决于操作系统。 Go
上的C++
中存在类似#ifdef
的内容,例如{{1}},这样我可以根据标记选择构建内容吗?如何在没有相同文件的情况下实现这一点,以便基于OS构建不同的内容?
答案 0 :(得分:9)
这是build tags的用途:
构建约束(也称为构建标记)是以
开头的行注释// +build
列出了文件应包含在包中的条件。约束可能出现在任何类型的源文件中(不仅仅是Go),但它们必须出现在文件顶部附近,前面只有空行和其他行注释。这些规则意味着在Go文件中,构建约束必须出现在package子句之前。
在运行时区分OS / arch的另一种方法是使用运行时GOOS and GOARCH constants:
GOARCH是正在运行的程序的架构目标:386,amd64或arm。
GOOS是正在运行的程序的操作系统目标:darwin,freebsd,linux等等。
答案 1 :(得分:5)