0

我正在尝试将 Bitbucket Pipelines 配置为自动将 Golang 代码编译到 Linux、OSX 和 Windows。我为此使用了 Go 的交叉编译功能;管道运行 Linux 环境,并通过设置 GOOS 和 GOARCH 的值交叉编译到 OSX 和 Windows。但是,我无法让 Windows 构建工作 - 它出错并告诉我它找不到某个包。Linux 和 OSX 构建都成功。但是,Windows 构建失败,告诉我它找不到 /go/src/github.com/sirupsen/logrus/hooks/syslog。之前的两个版本都成功地使用了这个包,并且同时运行了

ls /go/src/github.com/sirupsen/logrus/hooks/syslog
ls ${GOPATH}/src/github.com/sirupsen/logrus/hooks/syslog

build 命令之前的行显示该文件夹中的两个 Go 文件。我怀疑 Windows 文件系统试图与 Linux 文件系统通信可能有问题?我花了几个小时搜索和试验,但似乎没有什么能解决这个问题。

4

1 回答 1

1

syslog是一个特定于平台的服务,所以Logrus syslog hook 代码有一个特殊的注释,称为build tag,告诉 Go 工具不要在 Windows(或 Native Client 或Plan9)上构建它:

// +build !windows,!nacl,!plan9

除非您甚至在 Linux 上都不想集成 syslog,否则您可能希望将当前始终导入的应用程序代码分叉hooks/syslog为两个版本,一个用于具有 syslog 的平台,一个用于没有 syslog 的平台。如果当前导入的文件hooks/sysloglogconfig.go,您可以创建两个文件logconfig_syslog.gologconfig_nosyslog.gosyslog具有上述约束的nosyslog版本和具有相反约束的版本 ( // +build windows,nacl,plan9)。

Dave Cheney 写了更多关于构建标签和 Go 条件编译的各种风格的文章。

于 2017-06-22T22:07:54.223 回答