Goの環境構築で詰まったので備忘録


概要

Goの勉強しようとして、まずは動かす環境を作ろうと思ったところで
早速当然のように詰まったので、自分用の備忘録のつもりで書きました。

要約すると
環境変数の設定で詰まったという感じです。
GOPATHとかGOROOTとかのやつです。

起こった事

GoLandを使っていたので
GOPATHとGOROOTをpreferencesで設定した場合は問題なく動いていたのですが
ターミナルからgo run main.goをすると
パッケージが見つからないというエラーが発生しました。

main.go:4:2: package fmt is not in GOROOT (/Users/{username}/go/src/fmt)

GOPATHとかの設定が
/Users/{username}/Library/Application Support/go
にあるらしいので設定してみたりしたのですがダメでした。

やったこと

install

brew経由でgoを入れました。
brew install go

2022/4/3時点で、v1.18が入りました。

GoLandで動いていたのでその通りのパスでいいのかと思い、同じパスを指定しましたが以下のエラーが発生
warning: GOPATH set to GOROOT (/Users/{username}/go) has no effect

https://engineer-log.net/index.php/2016/11/25/gopath-set-to-goroot-cgo-has-no-effect/

この記事を参考に、パスを変更しいろいろと試したがうまくいかず…。

go envや、go mod init hogehogeなどのgoコマンド自体は実行ができていましたが
モジュールが読み込めず書いたプログラムが実行されない…。

解決方法

brew経由でインストールされた場合のパスを指定してなかったというのが結論でした。

こちらの記事を参考にしました。

https://qiita.com/sanogemaru/items/cabc700e6d9a28219cc8

自分はfish shellを使っているので
config.fishに記法を直して、以下を追加

set -x GOPATH $HOME/go
set -x GOROOT /usr/local/Cellar/go/1.18/libexec
set -x GOTOOLDIR /usr/local/Cellar/go/1.18/libexec/pkg/tool/darwin_amd64
set -x PATH $GOPATH/bin $PATH

無事外部モジュールを読み込み実行する事ができました。

恐らくプロジェクトのパス(GOPATH)がうまく繋がっていなかったのかもしれないです。
ただ、GoLandだと動いていたのが少し気がかりです。
まだGoを勉強始めたばかりなので、あまりよく分からず、一先ず動かす事を目標にやりました。