web-dev-qa-db-ja.com

同じフォルダーにgoファイルをインポートする

ローカルgoファイルを別のgoファイルにインポートするのが困難です。

私のプロジェクト構造は以下のようなものです

-samplego
--pkg
--src
---github.com
----xxxx
-----a.go
-----b.go
--bin

A.goをb.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はどのように機能しますか?ローカルインポートは問題になりますか?この場合のベストプラクティスは何ですか?モジュール内にgoファイルを1つだけ(テストを関連付けて)持っているのですか?

58
g0c00l.g33k

ディレクトリ内の任意の数のファイルは単一のパッケージです。 1つのファイルで宣言されたシンボルは、importsまたは修飾子なしで他のファイルで使用できます。すべてのファイルには、上部で同じpackage foo宣言が必要です(または、go buildからエラーが発生します)。

GOPATHpkg、およびsrcディレクトリが存在するディレクトリにbinを設定する必要があります。これは単に好みの問題ですが、アプリごとに1つではなく、すべてのアプリ(場合によっては$HOME)に単一のワークスペースを使用するのが一般的です。

通常、Githubパスはgithub.com/username/reponamegithub.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は、複数のファイルmainsをうまく処理できず、テストすることはありませんでしたが、聞いた(Dave Cheneyから herego runは、ダーティな依存関係を再構築しません。

少なくともGOPATHを正しいものに設定しようとしたように聞こえるので、まだ行き詰まっている場合は、環境変数(コマンドなど)の設定方法と実行したコマンドと発生したエラーを正確に含めることができます。 Linux/UNIX での設定方法(および設定を永続化する方法)および は、Goチームのアドバイスです。ワークスペースのセットアップ 。どちらも役に立たないかもしれませんが、見て、少なくともあなたが混乱している場合はどの部分があなたを混乱させるかを見てください。

53
twotwotwo

a.gob.goの両方を同じパッケージ内に宣言する限り、インポートは必要ありません。次に、go runを使用して、複数のファイルを次のように認識できます。

$ go run a.go b.go
24
Jason Kao

./main.go(パッケージmain)
./ a/a.go(パッケージa)
./ a/b.go(パッケージa)

この場合:
main.go import "./a"

A.goおよびb.goの関数を呼び出すことができます。最初の文字の大文字をオンにします。

9
user2889485

User2889485の返信のように、メインフォルダーからいくつかのファイルを移動するための本当に基本的なものが欲しかったのですが、彼の具体的な答えはうまくいきませんでした。それらが同じパッケージにあるかどうかは気にしませんでした。

GOPATHワークスペースはc:\work\goであり、その下には

/src/pg/main.go      (package main)
/src/pg/dbtypes.go   (pakage dbtypes)

main.go I import "/pg/dbtypes"

0
Dave Pile