私はGoを使用して新しいプロジェクトに取り組んでおり、私たちはすべてGoを初めて使用します。標準のgoディレクトリ構造に従い、すべてのコードを
$ GOPATH/src/github.com/companyname/projectname
これはgitリポジトリのルートでもあります
標準の推奨パスレイアウトは、特に多言語プロジェクト(たとえば、 Goベースのrest/httpバックエンド、およびhtml/javascriptフロントエンド。その場合、プロジェクト構造を次のようにしたいと思うでしょう。
/
doc/
src/
server/
main.go
module1/
module.go
client/
index.html
Makefile
しかし、実際にはコードをGOPATH内に配置する必要がありますか?
試みとして、ソースコードがGOPATHの外にある小さなプログラムを作成しました。プロジェクトをパッケージに簡単に分割できるので、main
パッケージはfoo/
フォルダー内のfoo
パッケージをimport "./foo"
を使用して参照できます。
私が見る限り、これによって私が許可されないことが2つあります。
go install
を使用できません。これも問題ではありません。ビルドパイプラインはツールをインストールします。ただし、ビルドサーバーがワークスペースをGOPATH内に配置しないようにすることはできます。
そのようなアプローチは推奨されませんか?もしそうなら、なぜそうですか?
上に挙げた2つの副作用以外の悪影響はありますか?
これは会社のプライベートプロジェクトであり、パブリックオープンソースコードではないことに注意してください。
実際のプロジェクトをGOPATHから切り離すのは魅力的なようですが、 Sh ステージにいるときは、規則に違反しないように注意してください。
2019更新
プロジェクトをGOPATH
に保存する必要がなくなりました。
GOPATH
以外のディレクトリに配置します。次に、次のように入力します。
go mod init github.com/youruser/yourproject
あなたは行ってもいいでしょう。
GOPATHを使用する必要はありませんが、go
コマンドから取得したすべてのNiceツールを利用できません。それらはすべて、コードが標準のGOPATH階層にあることを期待しています。
go install
、 だけでなく go test
(そしてニースgo test -cover
カバレッジツール)が機能しませんgo get
を使用すると、リモートコードをダウンロードして、すべてをGOPATHに書き込むことができるため、コピーする必要があります。
確かに、すべてをmake/scons/cmake/whateverで置き換えて処理を行うと、環境に応じて機能する可能性がありますが、go
ツールで追加の処理を実行できます。
(免責事項:私はこのようなものをデザインするのが好きですが、Goは初めてです。実際には試していません)
アイデア:なぜ両方ではないのですか?
シンボリックリンクを考慮に入れると、2つの極性オプションを利用できます。
(A)ワークスペースにシンボリックリンクされたsrcのコード
/
doc/
src/
server/
projectname/
client/
index.html
go_workspace/
src/
companyname/
projectname -> ../../../src/server/projectname
github.com/
someone/
library/
bin/
pkg/
Makefile
(b)srcにシンボリックリンクされたワークスペース内のコード
/
doc/
src/
server/
projectname -> ../../go_workspace/src/companyname/projectname
client/
index.html
go_workspace/
src/
companyname/
projectname/
github.com/
someone/
somelib/
bin/
pkg/
Makefile
私は「A」に寄りかかると思います。
projectname
は簡単に独自のリポジトリを持つことができます。または、プロジェクト全体に対して1つのリポジトリを持つことができます。go_workspace
バージョン管理外で、makeステップを介して初期化します(godep
を使用してからプロジェクトにシンボリックリンクします)