VS Code + dockerの環境で"Goのバイナリが見つからない"とエラーが出た件
goenvでGoのバージョン管理をしている環境で、VS codeでコード修正とデバッグしようとしたところ下記のようなエラーが発生しました。
Cannot find "go" binary. Update PATH or GOROOT appropriately.
また、VS codeのターミナルを使おうとすると、下記のようなエラーも発生します。
Failed to find the "go" binary in either GOROOT() or PATH(/root/.vscode-server/bin/fd6f3bce6709b121a895d042d343d71f317d74e7/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/go/bin).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
ソリューション
接続先コンテナのsettings.jsonに下記を追記します。
{
"go.goroot": "/root/.goenv/versions/1.16.0",
"go.gopath": "/root/go/1.16.0",
"terminal.integrated.shellArgs.linux": [
"-l"
]
}
go.goroot、go.gopath
GOROOTとGOPATH設定をします。
上記の環境変数は go env GOROOT
、 go env GOPATH
で確認できます。
terminal.integrated.shellArgs.linux
この設定に"-l" を指定すると、接続先の.bash_profileを読み込んでbashを起動できます。
私の環境ではdockerのコンテナに対してVS Codeでリモート接続しており、GOROOTやGOPATHの設定は接続先コンテナの.bash_profileに記述していました。そのため、vscodeのターミナルを開いた際、この.bash_profileの設定が読み込まれていないようだったため、 terminal.integrated.shellArgs.linux
の設定を追記しました。
You can pass arguments to the shell when it is launched.
For example, to enable running bash as a login shell (which runs
.bash_profile
), pass in the-l
argument (with double quotes):https://code.visualstudio.com/docs/editor/integrated-terminal#_shell-arguments
まとめ
普段使いはVimですが、デバッグ周りはどうしても他のエディターの方が使いやすいので、時々VS Codeを使いたくなるのです。