是否存在像C ++中的宏像#ifdef,所以我可以选择基于flag构建的内容?

时间:2015-06-15 13:35:48

标签: go

我需要为不同的包同一个文件构建linux和windows 在Windows上我需要import github.com/hashicorp/go-syslog和linux import log/syslog

并且文件中的内部代码我必须使用syslog.ALERTgsyslog.ALERT,具体取决于操作系统。 Go上的C++中存在类似#ifdef的内容,例如{{1}},这样我可以根据标记选择构建内容吗?如何在没有相同文件的情况下实现这一点,以便基于OS构建不同的内容?

2 个答案:

答案 0 :(得分:9)

这是build tags的用途:

  

构建约束(也称为构建标记)是以

开头的行注释
// +build
     

列出了文件应包含在包中的条件。约束可能出现在任何类型的源文件中(不仅仅是Go),但它们必须出现在文件顶部附近,前面只有空行和其他行注释。这些规则意味着在Go文件中,构建约束必须出现在package子句之前。

在运行时区分OS / arch的另一种方法是使用运行时GOOS and GOARCH constants

  

GOARCH是正在运行的程序的架构目标:386,amd64或arm。

     

GOOS是正在运行的程序的操作系统目标:darwin,freebsd,linux等等。

答案 1 :(得分:5)

您可以按照here所述的构建代码进行操作。

简而言之,插入一条评论,如

// +build linux

位于文件顶部,此文件仅在linux上构建。 因此

// +build windows

只会在Windows上构建文件。

请确认在提及的评论之后加上空白。请阅读this以供参考。