GOPATH
が適切に設定されていても、自分のパッケージを見つけるために「ビルドを実行」または「実行」を取得することはできません。何が間違っていますか?
$ echo $GOROOT
/usr/local/go
$ echo $GOPATH
/home/mitchell/go
$ cat ~/main.go
package main
import "foobar"
func main() { }
$ cat /home/mitchell/go/src/foobar.go
package foobar
$ go build main.go
main.go:3:8: import "foobar": cannot find package
foobar.go
ソースファイルがfoobar
というディレクトリにないため、機能しません。 go build
およびgo install
は、ソースファイルではなくディレクトリの一致を試みます。
$GOPATH
を有効なディレクトリに設定します(例: export GOPATH="$HOME/go"
foobar.go
を$GOPATH/src/foobar/foobar.go
に移動すると、ビルドは正常に機能するはずです。追加の推奨手順:
$GOPATH/bin
を$PATH
に追加する方法:PATH="$GOPATH/bin:$PATH"
main.go
を$GOPATH/src
のサブフォルダーに移動します。 $GOPATH/src/test
go install test
は、test
を端末に入力して呼び出すことができる実行可能ファイルを$GOPATH/bin
に作成する必要があります。編集:GOPATHを意味していたので、 fasmat の answer (vovoted)を参照してください
「 パッケージを見つける方法 」で説明したように、パッケージxxx
をディレクトリxxx
に配置する必要があります。
Go言語仕様 を参照してください:
package math
同じ
PackageName
を共有するファイルのセットは、パッケージの実装を形成します。
実装では、パッケージのすべてのソースファイルが同じディレクトリに存在する必要がある場合があります。
コード編成 言及:
パッケージ「
widget
」をインポートするプログラムをビルドするとき、go
コマンドはGoルート内でsrc/pkg/widget
を探し、パッケージソースが見つからない場合はsrc/widget
各ワークスペース内で順番に。
(「ワークスペース」はGOPATH
のパスエントリです。その変数は 'src, bin, pkg
'の複数のパスを参照できます)
(元の答え)
また、「 Goコードの記述方法 」に示すように、 GOPATH
をGOROOT
ではなく〜/ goに設定する必要があります。
Goパスは、インポートステートメントを解決するために使用されます。 go/buildパッケージに実装され、文書化されています。
GOPATH
環境変数は、Goコードを探す場所をリストします。
Unixでは、値はコロンで区切られた文字列です。
Windowsでは、値はセミコロンで区切られた文字列です。
プラン9では、値はリストです。
それはGOROOT
とは異なります:
Goバイナリディストリビューションは、
/usr/local/go
(またはWindowsの場合はc:\Go
)にインストールされることを前提としていますが、別の場所にインストールすることもできます。
これを行う場合、Goツールを使用するときにGOROOT
環境変数をそのディレクトリに設定する必要があります。
TL; DR:Goの規則に従ってください! (レッスンは難しい方法を学びました)、古いgoバージョンを確認し、 remove それらを確認します。最新のインストール。
私にとって解決策は異なっていました。共有Linuxサーバーで作業し、GOPATH
およびその他の環境変数を数回確認した後、まだ機能しませんでした。 「パッケージが見つかりません」や「認識されないインポートパス」など、いくつかのエラーが発生しました。 golang.org ( ninstall 部分を含む)の指示による this ソリューションで再インストールを試みた後、まだ問題が発生しました。
アンインストールされていない古いバージョン(go version
を実行してからwhich go
を再度実行します... DAHH)が this の質問に到達し、最終的に解決されたことに気づくまでしばらく時間がかかりました。