Go Wiki: インストールトラブルシューティング
はじめに
Goをインストールする際(ソースからでもバイナリ配布からでも)、うまく動作しないことがよくあります。このページは、比較的よくある、または診断が難しい問題に関する一般的な知見を集め、ヒントと解決策を提供することを目的としています。
目次
ヒント
環境変数
Goのインストールを設定するために設定できる環境変数がいくつかあります。詳しくはhttps://pkg.go.dev/cmd/go#hdr-Environment_variablesをご覧ください。
通常、それらのいずれも設定する必要はありません。
とはいえ、GOROOTのデフォルトはGoインストールのルートです。GOPATHのデフォルトはホームディレクトリ内の「go」という名前のディレクトリです。GOPATHディレクトリはGOROOTディレクトリに設定したり、含めたりしてはいけません。
Goをホームディレクトリの「go」ディレクトリにインストールした場合、goツールを実行すると警告が表示されます。Goのインストールを移動するか、GOPATH環境変数を別のディレクトリに設定する必要があります。
例えば、Unixシステムでは
> go run hello.go
warning: GOPATH set to GOROOT (/home/username/go) has no effect
Hello, world
> GOPATH=/home/username/gopath
> export GOPATH
> go run hello.go
Hello, world
トラブルシューティング
go buildコマンドは何もしない!
go buildコマンドはバイナリのみを生成します。パッケージディレクトリでgo buildを実行すると、通常通りパッケージがビルドされ(コンパイルエラーがあれば報告されます)、インストールはされません。インストールの場合はgo installを使用します。バイナリをビルドしているつもりなのに何も生成されない場合は、パッケージがmainであることを確認し、GOBINが設定されていないことを確認してください。
なぜgo getは"Fetching https://runtime/cgo?go-get=1"と報告するのですか?
ソース配布の場合、パッケージが最新であることを確認してください。また、上記の環境設定も再確認してください。
クロスコンパイル時に"runtime/extern.go:135: undefined: theGoos"というエラーが出ます
役立つスクリプトについては、WindowsCrossCompilingを読んでください。また、make.bashでクロスコンパイルツールチェーンをビルドする際に--no-clean引数を使用することもできます。
go getが一部のパッケージでは動作し、$GOROOTでpermission deniedと報告されるパッケージがあるのはなぜですか(GOPATHが適切に設定されているのに)?
いずれかの時点でGOROOTにパッケージをインストールした場合(GOPATHが設定されていないか、GOROOT自体をGOPATHに含めていた場合)、$GOROOT(常に最初にチェックされます)にまだディレクトリが残っており、それがGOPATHを上書きしている可能性があります。確認するには、go list -f {{.Dir}} importpathを実行し、$GOPATHの下のディレクトリを報告する場合は、まずそれを削除してみてください。
まだ助けが必要ですか?
IRCで質問するか、メーリングリストに質問してください。発生しているエラーに加えて、以下のコマンドの出力も提供してください。
Linux/darwin
go version
go env
env | grep GO
Windows
go version
go env
set | findstr GO
このコンテンツはGo Wikiの一部です。