2016-06-24 17 views
0

私はGoワークスペース全体と自分のパーソナルコード組織に関する問題を抱えています。そこで私は、作業領域がsrc、pkg、およびbinで、どのように設定されているかを理解しています。Goワークスペースを断片化する方法

しかし、これは実際に私のワークフローとうまく統合されません。私のコードフォルダには、仕事と個人の2つのフォルダがあります。仕事は私の仕事のために取り組んでいるすべてのプロジェクトを含むフォルダであり、個人は個人的なプロジェクトや楽しいテストのためのものです。どちらのフォルダでも、Goプロジェクト、JavaScript、Python、およびHTMLプロジェクトがあります。私は実際に仕事と個人の両方を同じGoフォルダに入れたいと思っていません。私は仕事にcdして私のプロジェクト(参照やアクセスの容易さ)とPersonalのものをすべて見たいからです。私は、WorkとPersonal Goのコードの衝突で満たされた1つのフォルダと、Javascriptの負荷のある別のWorkフォルダとの間で切り替える必要はありません。

私が説明したように私のプロジェクトを整理すると、GOPATHの機能性が完全に損なわれてしまいます。それは、インポートステートメントなどが混乱してしまいます。私は自分のプロジェクトを整理し続けていくことができます。それらはすべて中央のGo/srcフォルダにありますか?私はMac OS X上でシンボリックリンクを使って何かできると信じていますが、それがうまくいくかどうかわかりません。どの開発者も自社でこの問題を解決しますか?ありがとう!あなたは、あなたがやりたいようにするあなたの$GOPATH変数に複数のパスを設定することができますどのようにリストをブログ

+2

あなたはちょうどあなたが持っていないことを確認してください、あなたのGOPATHにシンボリックリンク_to_ディレクトリを使用することができますGOPATH内のシンボリックリンク。それ以外は、Goツールとの戦いは、その価値よりも大きなトラブルを引き起こすだけです。 – JimB

+1

ええ、あなたのゴパートにすべてを入れてください。そして、 'ln -s $ GOPATH/src/github.com/foots/project〜/ Work/project' – Plato

+0

@JimBこれを正しく理解すれば、私はわずかですUnixには新しい。私のコードを実際に '〜/ Code/Work/MyProject'に入れるのではなく、'〜/ gocode/src/MyProject'に自分のコードを入れますか?次に、自分のワークスペースにコードをシンボリックリンクすると、自分のワークスペースに 'cd'すると、自動的に端末がGOPATHにリダイレクトされますか? –

答えて

1

https://dmitri.shuralyov.com/blog/18

。基本的な作業領域(すべてのgo getパッケージが置かれる場所)があり、環境変数のデフォルト作業領域(UNIXベースの場合はコロン区切り)に従うことができます。 Goツールは、このユースケースを処理するように特別に設計されており、$GOPATHの各パスを検索し、その依存関係の最初のバージョンを使用して依存関係を調べます。

これを行う場合、唯一の重要なことは、実際のパス文字列として$GOPATHを使用できないことです(最初に分割する必要があります)。 Goパッケージによっては、この設定を処理できない場合があります。しかし、あなたがあなたの$GOPATHでのパスのいずれかで、ファイルを自分で見つける必要がある場合、この関数はそうします:

func FindInGoPath(filePath string) (string, error) { 
    pathList := strings.Split(os.ExpandEnv("${GOPATH}"), string(os.PathListSeparator)) 

    if strings.TrimSpace(pathList) == "" { 
     return "", errors.New("$GOPATH environment variable is empty/not set") 
    } 

    for _, path := range pathList { 
     if !strings.HasSuffix(path, string(os.PathSeparator)) { 
      path += string(os.PathSeparator) 
     } 
     if _, err := os.Stat(path + filePath); err == nil { 
      return path + filePath, nil 
     } 
    } 
    return "", errors.New("file not found") 
} 
関連する問題