Note

3年後の自分のために書いています

Go + VSCode でサブディレクトリに go.mod を置くと `could not import ... (no package for import ...)` になる

以下のようなやつ。

f:id:daido1976:20200917154706p:plain

環境

原因

gopls("go.useLanguageServer": true で有効)を使いながら、go.mod をサブディレクトリに置いて、プロジェクトのルートディレクトリから VSCode を開いてたのが原因だった。

解決策

gopls を使いたい場合

go.mod の置いてあるディレクトリまで移動してそこで VSCode を開く。

gopls を使わなくてもよい場合

そもそも "go.useLanguageServer": false にして gopls を使わないようにするという手もあった。(その場合は goimports などの command line tools が使われる、むしろ現在はこっちがデフォルト)

gopls は Go modules を正しく使用するプロジェクトのみを想定しているようだ。(公式の README にちゃんと書いてあった…)

https://github.com/golang/vscode-go#language-server

gopls is recommended for projects that use Go modules.