[解決済み] 同じフォルダーにあるgoファイルをインポートする
質問
ローカルのgoファイルを別のgoファイルにインポートするのに苦労しています。
私のプロジェクト構造は以下のようなものです。
-samplego
--pkg
--src
---github.com
----xxxx
-----a.go
-----b.go
--bin
b.goの中にa.goをインポートしようとしています。私は以下を試しました。
import "a"
import "github.com/xxxx/a"
どれもうまくいきませんでした。GOPATHをいじらないといけないのはわかるのですが、うまくいきませんでした。現在、私のGOPATHはsamplego(/workspace/samplego)を指していますが、以下のエラーが表示されます。
cannot find package "a" in any of:
/usr/local/go/src/pkg/a (from $GOROOT)
/workspace/samplego/src/a (from $GOPATH)
また、これらのソースファイルを別のプロジェクト/モジュールにインポートする場合、GOPATH はどのように機能するのでしょうか?その場合、ローカルインポートは問題になるのでしょうか?この場合、ベストプラクティスは何でしょうか - モジュールに1つのgoファイル(関連するテストを含む)だけを持つことでしょうか?
どのように解決するのですか。
ディレクトリ内のいくつのファイルでも一つのパッケージです。あるファイルで宣言されたシンボルは、他のファイルでは何もしなくても利用できます。
import
や修飾子なしで他のファイルから利用できます。すべてのファイルには、同じ
package foo
宣言が必要です (さもないと
go build
).
必要なのは
GOPATH
のあるディレクトリに設定します。
pkg
,
src
そして
bin
ディレクトリが存在します。これは好みの問題ですが、すべてのアプリに単一のワークスペースを用意するのが一般的です(時には
$HOME
を使用することもあります)、アプリごとに1つではなく、すべてのアプリに対して1つのワークスペースを持つのが一般的です。
通常、Githubのパスは
github.com/username/reponame
(となります(単に
github.com/xxxx
). ですから、もしあなたが
main
と別のパッケージがある場合、結局は
workspace/src
のように
github.com/
username/
reponame/
main.go // package main, importing "github.com/username/reponame/b"
b/
b.go // package b
インポートするときは、常に完全な
github.com/...
パスでインポートすることに注意してください: 相対インポートはワークスペースでは許可されません。相対インポートはワークスペースでは許可されません。
goimports
. もし、あなたが
go run
で済ませていたのなら、そろそろ
go build
:
run
は複数のファイルを扱うことができません。
main
をうまく処理できず、わざわざテストしなかったのですが、(Dave Cheneyから
ここで
)
go run
はダーティな依存関係を再構築しません。
少なくとも GOPATH を正しく設定しようとしたようですね。もしまだ行き詰っているなら、環境変数をどのように設定したか(コマンドなど)、どんなコマンドを実行してどんなエラーが起きたかを正確に書いてみてはいかがでしょう。 Linux/UNIX での設定方法 (および設定を永続化する方法) は以下のとおりです。 と ワークスペースの設定に関する Go チームからのアドバイスです。 . どちらも役に立たないかもしれませんが、見てみて、もし混乱しているのなら少なくともどの部分が混乱しているのかを指摘してください。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン