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

Bla*_*ama 6 go

我需要去为Linux和Windows不同的包相同的文件的基础上我需要在Windows import github.com/hashicorp/go-syslog和Linux上import log/syslog

我必须使用syslog.ALERTgsyslog.ALERT依赖于操作系统的文件内部代码.对确实存在Go的东西像宏C++一样#ifdef,所以我可以选择基于标志构建什么?如何实现这个没有,同一个文件有不同的内容用于基于操作系统的构建?

Ain*_*r-G 9

这是构建标记的用途:

构建约束(也称为构建标记)是开始的行注释

// +build
Run Code Online (Sandbox Code Playgroud)

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

在运行时区分OS/arch的另一种方法是使用运行时的GOOS和GOARCH常量:

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

GOOS是运行程序的操作系统目标:darwin,freebsd,linux等之一.


Pet*_*mel 5

您可以使用此处所述的构建标记.

简而言之,插入一条评论

// +build linux
Run Code Online (Sandbox Code Playgroud)

在文件的顶部,这个文件只能在linux上构建.于是

// +build windows
Run Code Online (Sandbox Code Playgroud)

只会在Windows上构建文件.

在提到注释后,请务必留空.阅读本文以供参考.