環境
- macOS Sonoma 14.4.1
- Apple M1 Pro
- VSCode:1.90.1
- Go for Visual Studio Code:v0.41.4
-
go1.22.4 darwin/arm64
installed by homebrew - zsh
もともとはJetBraisのGoLandを利用していたんですが、周囲でVSCode派が多く無料で利用できるので乗り換えてみることにしました。
GoのExtensionをインストールしていざ利用と思っていたところ以下のようなエラーダイアログがでて定義ジャンプなどの機能が使えなかったので解消のための設定を記録しておきます
遭遇したエラー
Failed to find the "go" binary in either GOROOT() or PATH(...). Check PATH, or Install Go and reload the window. If PATH isn't what you expected, see https://github.com/golang/vscode-go/issues/971
これなにかとういと、Goのパスが解決できないよってことなんですが...
goはHomebrewでインストール。デフォルトで使っていてexportなどは特に記載していない状況
❯ go env GOPATH
$HOME/go
❯ go env GOROOT
/opt/homebrew/Cellar/go/1.22.4/libexec
zshでHomebrewのPATHをexportしているはずなのになぜ…
VSCodeの設定などを確認
VSCodeはデフォルトで/bin/shを使っているのでHomebrewなどのパスが通っていない状況でした
Terminalの設定を
"terminal.integrated.defaultProfile.osx": "zsh"
で zsh にしてたので
exportされているもんだろうと思ってましたが、どうやら /bin/sh で起動して /bin/zsh を後で起動しているようですね
sh-3.2$ echo $SHELL
/bin/sh
sh-3.2$ which go
sh-3.2$
HomebrewのPATHを通すコマンドは .zprofile
でしているので読み込まれなくて当たり前ですね
❯ cat .zprofile
eval "$(/opt/homebrew/bin/brew shellenv)"
解決していきましょう!
このエラーについてググってみると主に解説されている解決方法は
settings.jsonでgo.goroot
のPATHを指定するというもの。
私は brew unlink && link
で goのバージョンを切り替えて開発することがあるので、毎回これを設定し直すのはめんどくさいなと思いました。
ということで、/bin/sh でHomebrewのPATHを通すコマンド を実行してあげられれば良さそうです。
❯ cat .profile
eval "$(/opt/homebrew/bin/brew shellenv)"
これでVSCodeを再起動
sh-3.2$ echo $PATH
/opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/System/Cryptexes/App/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/local/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/bin:/var/run/com.apple.security.cryptexd/codex.system/bootstrap/usr/appleinternal/bin:/Library/Apple/usr/bin