編集:相対インポート パスは、Go で使用する方法ではありません。ドキュメントが不足していることは、相対パスの人気について何かを示しており、それらを使用する理由がわかりません。Go が推奨するコード編成はかなりうまく機能します。すべてのパッケージには一意のインポート パスが必要であり、同じインポート パスを使用してどこにでもインポートする必要があります。
のようなパッケージがgithub.com/ha/doozerd/peer
その隣人をどのようにインポートするかを見てください。これは Go プロジェクトでは一般的な方法であり、私は何度も見てきました。パッケージcamlistore.org/pkg/auth
(これもGitHubcamlistore.org/pkg/netutil
にあります。Go の主な作成者の 1 人によって書かれています) はフル パスでインポートされます。
同じプロジェクトにコマンドとライブラリの両方がある場合でも、このアプローチは機能します。最初の質問では、賢明にもベスト プラクティスを尋ねました。この件に関するベストプラクティスを説明するために最善を尽くしました。
Go ではインポート パスを相対にすることはできません。Go プロジェクトを編成する上で欠かせない、How to Write Go Code を読むことをお勧めします。簡単な概要は次のとおりです。
~/go
Go 開発用のようなディレクトリを作成します。次に、次のように言います。
$ export GOPATH=~/go
$ mkdir $GOPATH/{src,bin,pkg}
$GOPATH/src
は、 でダウンロードしたものも含め、すべての Go パッケージのソース コードを保持しますgo get
。コンパイルの出力を保持しますbin
。pkg
パッケージ名を持つパッケージmain
はコマンドであり、実行可能なバイナリを生成し、$GOPATH/bin
. 他のパッケージはライブラリであり、それらのコンパイルされたオブジェクト ファイルは に置かれ$GOPATH/pkg
ます。
コードを に入れると、$GOPATH/src/matt/meme
でインポートできますimport "matt/meme"
。パッケージ名にはプレフィックスを使用し、標準ライブラリには短いパッケージ名を残すことをお勧めします。そのため、$GOPATH/src/matt/meme
代わりにを使用しました$GOPATH/src/meme
。
この考えに基づいてコードを編成します。