11

私のGOPATHは/Users/joe/goです。私は、というパッケージに取り組んでいます。myprojこれは、というパッケージmyprojです。

書きたい場合import "myproj"、必要なディレクトリ構造は次のとおりです。

$GOPATH/src/myproj/myproj.go
$GOPATH/src/myproj/myproj_test.go
...

ただし、これをGitに適合させることはできないようです。Googleのサンプルパッケージを見ると、次の形式が表示されます。

go.example/hello/hello.go
go.example/LICENSE

go.exampleリポジトリの名前はどこにありますか。

したがって、実際のパッケージディレクトリはリポジトリ内にあります。このリポジトリの内容を$GOPATHのディレクトリに置くと、たとえば

$GOPATH/src/go.example/hello/hello.go
$GOPATH/src/go.example/LICENSE

次に、import "go.example/hello"ではなく入力する必要がありimport "hello"ます。

プロジェクトに戻ると、これをGitリポジトリにパッケージ化する必要があります。次に、コンテナディレクトリが必要です。したがって、現在のファイル構造は次のとおりです。

$GOPATH/src/myproj                        # The dir for the git repo
$GOPATH/src/myproj/.git
$GOPATH/src/myproj/LICENSE                # Files in the base of the repo
$GOPATH/src/myproj/myproj/myproj.go       # Package files in package dir
$GOPATH/src/myproj/myproj/myproj_test.go  

gitリポジトリをバインドするために外部myprojディレクトリが必要であり、パッケージディレクトリであるために内部ディレクトリが必要です。import "myproj/myproj"結果として、ではなく入力する必要がありimport "myproj"ます。

これを修正するにはどうすればよいですか?開発中のプロジェクトごとに1つずつ、複数の$ GOPATHSを追加する必要がありますか?

前もって感謝します。

4

3 に答える 3

8

最初に:

$GOPATH開発中のプロジェクトごとに 1 つずつ、複数の を追加する必要がありますか?

いいえ、複数の はまったく必要ありません$GOPATH

これらは、(場合によっては複数の) プロジェクトを管理するためのツールです。いくつかの依存関係があることが既にわかっている新しいプロジェクト環境をセットアップする場合 (そのプロジェクトに固有の可能性があるか、他の人々のセットアップに似ている必要があります)、新しいプロジェクト フォルダーを作成し、GOPATH. GOPATHそうすれば、そのプロジェクトのライブラリの特定のバージョンを使用 (= チェックアウト) しながら、他のプロジェクト フォルダー (= s)内の他のプロジェクトの他のバージョンを使用することもできます。

author/projectあなたのパスの問題に関しては:Goは(または)の一般的なパラダイムに従いますorganization/project。これにより、複数の人、作成者、および組織が同じ名前でプロジェクトを開始する場合の名前の衝突を防ぐことができます。(作成者は、サブフォルダー、「自分の」フォルダー内のサブプロジェクトも使用できます。)

これを認識してmyprojて、パッケージ パスとしてのみ使用したい場合は、リンク先のサンプル パッケージとは対照的に、そのフォルダーに git リポジトリを作成しても問題ありません。

私のプロジェクトに戻ると、これを Git リポジトリにパッケージ化する必要があり、それからコンテナ ディレクトリが必要です。

では、なぜそう思うのでしょうか?Goはそれを必要としません。Git はどちらも行いません。

したがって、次のように動作します。

/src/myproj/.git
/src/myproj/myproj.go

推奨される方法ではありませんが、リポジトリを自分のフォルダーに入れることができmyprojます。


これを次のようにテストしました。

FOLDER
FOLDER/src
FOLDER/src/myproj
FOLDER/src/myproj/myproj.go
FOLDER/src/mainproj
FOLDER/src/mainproj/main.go

folder/src/myproj/myproj.go

package myproj

type My struct {
    I int
}

folder/src/mainproj/main.go

package main

import (
    "fmt"
    "myproj"
)

func main() {
    my := myproj.My{7}
    fmt.Printf("Works! %v", my.I)
}

ランニング

cd FOLDER
set GOPATH=FOLDER
go run src/mainproj/main.go

出力します:

Works! 7

さて、あなたgit initがフォルダーFOLDER/src/myprojにいる場合、それはGo自体にはまったく関係ありません.

于 2012-06-03T16:18:37.210 に答える
2

通常の設定は次のようになります。

$ GOPATH、最初の概算では1つのパスのみが必要ですが、例/Users/joe/go/は問題ありません。myprojこれで、で見られるgithubリポジトリができましたhttp://github.com/joe/myproj。このパッケージのインポートステートメントは次のようになります。

import "github.com/joe/myproj"

(単一値の)$ GOPATHを振り返ると、goツールはでパッケージを検索します$GOPATH/src/github.com/joe/myproj。これは、ファイルmyproj.go、etc.go、...が内部にある「外部」githubリポジトリの「ローカル」ルートです。

これらの規則がないと、誤って呼び出されたJack(およびAliceとBob)のプロジェクトと名前空間が衝突するmyprojため、最初からこれに慣れることをお勧めします。

于 2012-06-03T10:12:39.537 に答える
0

自然に複数のパッケージをインポートします:

  • 標準的なもの
  • を使用してダウンロードするものgo get
  • あなたのプロジェクトのいくつかのもの
  • 他のプロジェクトのいくつかのもの

最も簡単なのは、go getすべての外部パッケージ(mysqlドライバーなど)を配置するディレクトリを選択し、プロジェクトディレクトリをGOPATHに追加することです。

たとえば、これが私の(簡略化された)GOPATHです:

export GOPATH=/home/dys/dev/go:/home/dys/dev/Chrall/go:/home/dys/dev/braldop/go:/home/dys/dev/lg/go

go get私はinを使用して取得したすべての外部ライブラリを配置し/home/dys/dev/go、Chrall、braldop、およびlgは私のプロジェクトの3つです。

これら3つのプロジェクトのそれぞれに、パッケージとコマンドがあります。例えば ​​:

/home/dys/dev/lg/go/src/pkg1/xxx.go
/home/dys/dev/lg/go/src/pkg2/xxx.go
/home/dys/dev/lg/go/src/prog1/xxx.go

すべてのパッケージはGOPATHを介して見つかります。

たとえば、ドライバーmysqlを使用する場合、それらのxxx.goの1つで:

import (
"database/sql"
_ "github.com/ziutek/mymysql/godrv"
)

ドライバーは/home/ dys / dev/goにインストールされています

go get github.com/ziutek/mymysql/godrv

参照: http: //golang.org/doc/code.html

GOPATH = / home / user / ext:/ home / user / mygo

(Windowsシステムでは、パス区切り文字としてコロンの代わりにセミコロンを使用します。)

リスト内の各パス(この場合は/ home / user/extまたは/home/ user / mygo)は、ワークスペースの場所を指定します。ワークスペースには、Goソースファイルとそれに関連するパッケージオブジェクト、およびコマンド実行可能ファイルが含まれています。

于 2012-06-03T10:19:30.413 に答える