表題の通り。
環境
- Max OS X (high sierra)
事象
go@1.10をbrewでインストール
brew install go@1.10
して、インストールし/usr/local/opt/go@1.10/bin/goにPATHを通すなにかしらをgo getする
go get -u github.hogehogeohge
import path does not begin with hostnameが発生。
何これ
import path does not begin with hostnameは
GOROOTがらみの時に発生することが多いようで、つまりはPATH通ってないからgo自体のパッケージが見つかってないよということみたいです。
で、GOROOTを設定しないといけないわけですが、
GOROOTってそもそも設定しないで良い時代なのではという気持ちになります。
https://dave.cheney.net/2013/06/14/you-dont-need-to-set-goroot-really
https://kwmt27.net/index.php/2013/06/14/you-dont-need-to-set-goroot-really/
GOROOTの設定が必要なるのはGOROOTを移動させる時ぐらいらしい。
GOROOTについて
- もうユーザーが環境変数として設定する必要は無いらしい
- go env GOROOTすると、goのビルド時のGOROOTが取得できる。ユーザーが環境変数を設定しない場合はこれが使用されるらしい
- goのプロセス実行前にGOROOTは決定するので、goのコードでosにset envとかしてもGOROOTは書き変わらないらしい
https://golang.org/pkg/runtime/
https://golang.org/cmd/go/#hdr-GOPATH_environment_variable
https://github.com/golang/go/issues/22302
GOROOTを確認
ということで、実際に確認してみる。
brew install したものをみてみると
/usr/local/opt/go@1.10/bin/go env GOROOT /usr/local/opt/go/libexec
実際のGOROOTにあたるディレクトリをのぞいてみると
ls /usr/local/opt/go@1.10/libexec/ bin go gocache tmp
ls /usr/local/opt/go@1.10/libexec/go AUTHORS PATENTS bin misc test CONTRIBUTING.md README.md doc pkg CONTRIBUTORS VERSION favicon.ico robots.txt LICENSE api lib src
…どういうことや!?
というと、GOROOTの位置が変わっちゃってるみたいなんですよね。brewからinstallしただけのはずなのに。
そして、何回かbrew unistallとbrew installを繰り返しても再現するのでした。
自分だけなんだろうか。
(2019/03/12の出来事)
しかし、以前 別の端末にbrew install go@1.10した際は
/usr/local/opt/go@1.10/libexec/goなんてディレクトリはなくて、
/usr/local/opt/go@1.10/libexecが GOROOTになっていました。
考えられること
- 最近の変更で、brewでインストールするgo@1.10がぶっ壊れてる(brewが原因)
- brewでインストールしたものがぶっ壊れた(自分の端末が原因)
対処法
- GOROOTを環境変数として設定して調整する
- GOROOTをgo env GOROOTと合わせる(戻す?)
まとめ
いかがでしたか?(言ってみたかった)
ということで、ハマった時はそのあたり見直してみてください。
0 件のコメント:
コメントを投稿