goenv利用環境下でVSCodeのGoのバージョンが正常に反映されない問題を修復する

goenvでGoのバージョンを切り替えたとき、VSCodeが認識するGoのバージョンが正常に反映されない問題の修復方法のメモです。

修正方法

eval "$(anyenv init -)"のあとに$GOENV_ROOT/shims:$PATHを追加し、VSCodeを再起動します。

####################
# anyenv
####################
`eval "$(anyenv init -)"`
`$GOENV_ROOT/shims:$PATH`

調査内容

通常のターミナルでwhich goコマンドを使ってGoの場所を確認すると、goenv利用環境下では次のような結果が返ります。

# 通常のターミナルで`which go`を実行した結果

$ which go
~/.anyenv/envs/goenv/shims/go

このファイルはシェルスクリプトで、“go” で始まるスクリプトの時にファイルパスの設定を行っているようです。

一方、VSCodeのターミナルでwhichコマンドを打つと下記の結果が返ってきます。

# VSCodeで`which go`を実行した結果

$ which go
~/.anyenv/envs/goenv/versions/1.21.6/bin/go

VSCodeでは$GOROOTを見ており、goenvで切り替えただけではGoのバージョンが反映されないようです。

eval "$(anyenv init -)"のあとに$GOENV_ROOT/shims:$PATHを追加し、VSCodeを再起動することで修復できます(再起動後は$GOENV_ROOT/shims:$PATHを見るようになるので、goenvで切り替えた直後に反映されるようになります)。

####################
# anyenv
####################
`eval "$(anyenv init -)"`
`$GOENV_ROOT/shims:$PATH`

補足

バージョンを切り替え後、必要なパッケージを再度インストールしないといけません。VSCodeで利用するdlvなどのパッケージは下記の手順で更新できます。

  1. VScodeを開いてCtrl + Shift + P
  2. >Go: Install/Update Toolsを入力
  3. 対象Toolの選択をしてアップデート