我正在尝试配置Bitbucket管道以自动将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文件系统交谈时可能出现问题?我花了几个小时搜索和试验,但似乎没有解决问题 .
1 回答
syslog
是一个特定于平台的服务,因此the Logrus syslog hook code有一个特殊的注释,称为build tag,告诉Go工具不要在Windows(或Native Client或Plan9)上构建它:除非您不希望在Linux上进行syslog集成,否则您可能希望将当前始终导入
hooks/syslog
的应用程序代码分为两个版本,一个用于具有syslog的平台,另一个用于没有 . 如果导入hooks/syslog
的文件当前是logconfig.go
,则可以创建两个文件logconfig_syslog.go
和logconfig_nosyslog.go
,syslog
版本具有类似上面的约束,而nosyslog
版本则相反(// +build windows,nacl,plan9
) .Dave Cheney wrote a bit more about build tags and the various flavors of Go conditional compilation.