2016-04-13 10 views
4

私のgitのプロジェクトはここに保存されていますGOPATHフォルダへのシンボリックリンクは一般的な慣行ですか?

~/dev/git/project1 ... 

私はgolangプロジェクトを始めていて、それがGOPATHを使用すると、私のプロジェクトのGitのパスからGOPATHへのシンボリックリンクを作成するのが一般的である必要があるため?

+0

私は各プロジェクトのGOPATHにもシンボリックリンクしますが、GOPATH内にはシンボリックリンクを入れないでください。 Goツールは依存関係を解決する際にGoalツールを意図的にフォローしません。 – JimB

答えて

1

私がやってやることは、代わりに自分の普通のグローバル$GOPATHに隔離しておきたいgoプロジェクトの中で私自身のGOPATHを作りました。

  • チェックsrc場合は(~/dev/git/project1ここで、プロジェクトフォルダに)存在します:

    は、私は(プロジェクトのルートフォルダに「)b」スクリプトを作成し、それを作成していない場合。

  • src/mypackageが存在するかどうかを確認します。そうでない場合は、シンボリックリンクsrc/mypackage -> ~/dev/git/project1を作成します。
  • が別名で呼ばれている:その方法alias b='. ./b'

、同じ 'b'( 'ビルド' の短い)は~/dev/git/project1/src/mypackageに入り、go installを行います。
mainパッケージをお持ちの場合は、~/dev/git/project1/binにバイナリが作成されます。

私のゴープロジェクトは自立していて、普通のの他のゴーパッケージの海では失われません。私は、グローバルプロジェクトのために$GOPATHをグローバルに予約しています。golang.org/x/tools/cmd/...github.com/fzipp/gocycloなど(他のリンター)。言い換えれば


私はGOPATHシンボリックリンクはありません。
私は(ローカルにプロジェクトを言った)ローカルGOPATHに自分のプロジェクト内の私のパッケージをシンボリックリンクけど、GOPATH自体は任意のシンボリックリンクせずに、いつものように定義された固定フォルダ(私のプロジェクトに再び特定)、である)

そして、ソース依存関係を提供するためにはvendor folderと完全に互換性があります。そのため、パッケージ間の依存関係の問題の


alias b='. ./b' 
cd /path/to/my/project 
b: 

#!/bin/sh 
if [ ! -e src ]; then mkdir src ; fi 
if [ ! -e src/myproject ]; then ln -s /path/to/my/project src/myproject; fi 
cd src/myproject 
go install 
cd ../.. 
+0

あなたのこの 'b'スクリプトを共有できますか?これはバッチスクリプトですか? –

+1

@coolbreezeはい、 'ln -s'、' cd'と 'go install'を作る単純なbashスクリプトです。空想的なものではありませんが、私の望む場所でプロジェクトをコンパイルするのに十分です。 – VonC

+0

気にしない場合は投稿できますか? –

2

、シンボリックリンクをGOPATHのために使用されました。しかし、GOPATHの構造は、それが複数のプロジェクトに使用されていたことを示唆していました。シンボリックリンクは、あなたのGOPATHが開発者には推奨されていません。

しかし、最新バージョン(1.6)では、パッケージの最上位にあるvendor/というフォルダの形で、依存関係の問題(1.5で実験的に導入された)の解決策を確定しました。このフォルダは、import文で使用されるパッケージの通常のGOPATHの前に検索されます。

vendor/フォルダはるかに少ない時間がかかりGOPATHをシンボリックリンクよりを使用して作る、godepまたはglideのような依存関係のプロセスを合理化するために使用するためのさまざまなツールがあります。ベンダーパッケージを使用することは、シンボリックリンクされた依存関係よりも再現性が高く、パッケージが誰にでも使えるようになります。

GOPATHをシンボリックリンクせずに、この新しく導入された標準を使用することをおすすめします。

+1

私はgopathをシンボリックリンクしません。私のパッケージを私のgopathにsymlinkします。私は私のプロジェクトでもベンダーを使っています。 – VonC

関連する問題