Go Wiki: インストールに関するトラブルシューティング

はじめに

Goをインストールする際(ソースからでもバイナリ配布物からでも)、うまくいかないことがよくあります。このページでは、比較的一般的または診断が難しい問題に関する一般的な知見を収集し、ヒントと解決策を提供することを目的としています。

目次

ヒント

環境変数

Goのインストールを設定するために設定できる環境変数がいくつかあります。https://pkg.go.dev/cmd/go#hdr-Environment_variablesを参照してください。

通常、それらのいずれも設定する必要はありません。

つまり、GOROOTのデフォルトはGoインストールのルートです。GOPATHのデフォルトはホームディレクトリにある「go」という名前のディレクトリです。GOPATHディレクトリは、GOROOTディレクトリに設定したり、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が設定されていないか、GOPATHGOROOT自体が含まれている場合)、$GOROOT(常に最初にチェックされます)にディレクトリが残っている可能性があり、GOPATHを上書きしています。確認するには、go list -f {{.Dir}} importpathを実行します。GOPATH下のディレクトリが報告された場合は、まずそれを削除してみてください。

それでもヘルプが必要ですか?

IRCでアクセスするか、メーリングリストで質問してください。エラーに加えて、次のコマンドの出力を提供する必要があります。

Linux/macOS

go version
go env
env | grep GO

Windows

go version
go env
set | findstr GO

このコンテンツはGo Wikiの一部です。