0

Golang コードを Linux、OSX、および Windows に自動的にコンパイルするように Bitbucket Pipelines を構成しようとしています。これには 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 コマンドの前の行には、そのフォルダー内の 2 つの Go ファイルが表示されます。Linuxファイルシステムと通信しようとしているWindowsファイルシステムに何か問題があるのではないでしょうか? 検索と実験に数時間を費やしましたが、問題を解決するものは何もないようです。

4

1 に答える 1

1

syslogはプラットフォーム固有のサービスであるため、Logrus syslog フック コードにはbuild tagと呼ばれる特別なコメントがあり、Windows (または Native Client またはPlan9 )でビルドしないように Go ツールに指示します。

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

Linux でも syslog を統合したくない場合を除き、現在常にインポートhooks/syslogしているアプリケーション コードを 2 つのバージョンにフォークすることをお勧めします。1 つは syslog のあるプラットフォーム用で、もう 1 つはないプラットフォーム用です。インポートするファイルhooks/syslogが現在、たとえばの場合、上記のような制約のあるバージョンと反対のバージョン ( ) の 2 つのファイルと を作成logconfig.goできます。logconfig_syslog.gologconfig_nosyslog.gosyslognosyslog// +build windows,nacl,plan9

Dave Cheney はビルドタグと Go 条件付きコンパイルのさまざまなフレーバーについてもう少し詳しく書いています。

于 2017-06-22T22:07:54.223 に答える