web-dev-qa-db-ja.com

行く、行く、行く、インストール、ローカルパッケージ、バージョン管理

ローカルパッケージを持つgoプロジェクトを作成するためのワークフローを理解できません。

たとえば、バージョン管理にgitを使用して、main.goファイルと、utilsパッケージに含まれるtools.goファイルを使用して、新しいプロジェクトを作成するとします。だから私はこのようなディレクトリ構造を持っています:

/myproject/
   main.go
   utils/
     tools.go

main.goは次のようになります。

package main
import "./utils"
func main() {
    utils.DoSomthing()
}

tools.goは次のようになります。

package utils;
func DoSomething() {
}

go buildおよびgo runを使用して、すべてがローカルで正常に機能します。しかし、これはgithubでホストされているため、他のユーザーにgo getコマンドを使用してインストールしてもらいたいと思います。したがって、ローカルパッケージのインポートは、「github.com/user/project/utils」という形式を使用するように変更する必要があります。ただし、現在はソースコードのコピーが2つあり、実際の問題はgit履歴のコピーですダウンロードしたコピーを利用するインポートがあります。したがって、git履歴を使用してコピーを作成している場合、tools.goに加えられた変更はダウンロードされたコピーを使用するため、気付かれることはありません。

だから、誰かが同じプロジェクト内でgo get、バージョン管理、パッケージインポートを使用する正しい方法を説明できるかどうか疑問に思っています。

57
Seth Hoenig

新しい go tool および github.com の使用方法に関する短いステップバイステップガイドを作成しました。役に立つかもしれません:

1。 GOPATHをセットアップします

環境変数GOPATHを任意のディレクトリに設定できます。大規模なプロジェクトがある場合は、プロジェクトごとに異なるGOPATHを作成することをお勧めします。プロジェクトAのライブラリを更新しても、同じライブラリの以前のバージョンが必要になる可能性のあるプロジェクトBが壊れないように、このアプローチは特に展開に推奨します。

また、GOPATHをコロンで区切られたディレクトリのリストに設定できることに注意してください。そのため、一般的に使用されるすべてのパッケージを含むGOPATHがあり、追加のパッケージまたは既存のパッケージの異なるバージョンを使用してプロジェクトごとにGOPATHSを分けることができます。

しかし、多くの異なるGoプロジェクトに同時に取り組んでいない限り、おそらく1つのGOPATHをローカルに持つだけで十分でしょう。それで、1つ作成しましょう:

mkdir $HOME/gopath

次に、2つの環境変数を設定して、 go tool に既存のGoパッケージの検索場所と新しいパッケージのインストール場所を指定する必要があります。おそらく、次の2行を~/.bashrcまたは~/.profileに追加することをお勧めします(後で.bashrcをリロードすることを忘れないでください)。

export GOPATH="$HOME/gopath"
export PATH="$GOPATH/bin:$PATH"

2。新しいプロジェクトを作成します

github.com でホストされる新しいGoプロジェクトを作成する場合は、$GOPATH/src/github.com/myname/myprojectの下にこのプロジェクトを作成する必要があります。 goツールも同じ規則に従うため、パスがgithub.comリポジトリのURLと一致することが重要です。それでは、プロジェクトルートを作成し、そこで新しいgitリポジトリを初期化しましょう。

mkdir -p $GOPATH/src/github.com/myname/myproject
cd $GOPATH/src/github.com/myname/myproject
git init

このような長いパスを入力するのは好きではないので、通常、現在作業しているプロジェクトのシンボリックリンクをホームフォルダーに作成します。

ln -s $GOPATH/src/github.com/myname/myproject ~/myproject

3。アプリケーションを作成します

コーディングを開始し、ファイルをgit addおよびgit commitすることを忘れないでください。また、サブパッケージにはimport "./utils"などの相対インポートを使用しないでください。これらは現在ドキュメント化されておらず、goツールでは動作しないため、まったく使用しないでください。代わりにgithub.com/myname/myproject/utilsなどのインポートを使用してください。

4。プロジェクトを公開します

github.comの新しいリポジトリ を作成し、SSH公開キーをまだアップロードしていない場合はアップロードし、リモートリポジトリに変更をプッシュします。

git remote add Origin [email protected]:myname/myproject.git
git Push Origin master

5。プロジェクトの作業を続けます

.bashrcにGOPATHを設定し、ホームフォルダーにプロジェクトへのシンボリックリンクを作成した場合は、cd myproject/と入力して、そこにあるファイルを編集するだけです。その後、git commit -aを使用して変更をコミットし、git Pushを実行して github.com に送信します。

86
tux21b

おそらく、ソースの2つのコピーは必要ありません。 Goコードの記述方法 に従って、Go開発を行うパスが必要です。「godev」、その下に「src」ディレクトリ、その下に「github」と言います。 com/user/project」および「github.com/user/project/utils」。 (私は同意しますが、それは少し硬直しているように見えますが、私たちに説明された利点は、メイクファイルからの自由です。)myprojectを捨てます。これがあなたの仕事をする場所です。

少なくともGOPATHをgodevに設定しますが、おそらくGOPATHは自分のものではない外部パッケージのパスで開始する必要があります。たとえば、使用するGOPATHは<my place on the file system>/goext:<my place on the file system>/godev

Main.goでのインポートが「github.com/user/project/utils」になっているはずです。

Go getやgoコマンドがファイルを上書きしたりバージョン管理を台無しにしたりする心配はありません。 GOPATHを介して、彼らはあなたが働いている場所を見て、バージョン管理がどのように機能するかを知っています。

10
Sonia

コードをローカルバージョンリポジトリに保持する場合は、コードをGOPATHに配置するだけです。

GOPATHは複数のパスを受け入れます。例えば。 Linuxで

GOPATH=$HOME/go:$HOME/prj/foo

したがって、サードパーティのパッケージを$ HOME/go/src /にインストールすることもできます。そして、$ HOME/prj/foo/srcでコードを制御し続けることができます。

ref:go help gopath

6
Daniel YC Lin

多くの人々は、絶対パスを使用してプロジェクトの構造を構築し、インポートする必要があると言います:

import "github.com/user/utils"

ただし、これによりプロジェクトが単一のリポジトリ(github)内で制限される場合があります。代わりに相対パスを使用したい:

  import "./utils"

私はそれを行う方法を見つけられませんでした、ここで質問を提起します: GOプロジェクトパッケージを異なるリポジトリ(github&sourceForge)でホストする場合の組織化方法

0
rellocs wood