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
は一部のパッケージでは機能し、他のパッケージでは$GOROOT
でpermission denied
を報告するのですか(GOPATHは適切に設定されています)?
ある時点でパッケージをGOROOT
にインストールした場合(GOPATH
が設定されていないか、GOPATH
にGOROOT
自体が含まれている場合)、$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の一部です。