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が一部のパッケージでは動作し、$GOROOTpermission 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の一部です。