vscodeでgoのLanguage Serverを有効にしたらコード定義元ジャンプができなくなった

概要

vscodeでgoのLanguage Serverの設定を有効にしたらコード定義元へのジャンプができなくなってしまったので原因を調査した。

settings.json

結論

go.modがプロジェクトのルートに存在している必要がある。

cf. stackoverflow - How to properly use go modules in vscode?

vscodeでフォルダを開くときに、こうではなく、

こう開くようにしないとパスが良しなに解決されないせいか、コードジャンプできなかった。

参考までに、go.modの内容。

module github.com/bmf-san/gobel-api/appと書いているのでこれを読み取って良しなに解釈してくれるのかと思ったらそうではないらしい。

調査方法

vscodeのターミナルを開いて、OUTPUT>gopls(server)を選択。コードジャンプしてみると、エラーログを確認することができる。

エラーログから推測するに、パスが怪しかったので色々調べてみたら上述のstackoverflowに当たりがあった。

解決策

パッと思いつく限りの対策は以下。

  • language serverの設定をオフにする
  • go.modをプロジェクトルートに置くようにする、あるいはgo.modが存在しているフォルダを開く

goplsやvscodeの設定等で調整できるのかもしれないのが、すぐ見つけられなくて時間かかりそうだったのでlanguage serverの設定をオフにする方向でとりあえず対応した...

まだ枯れた設定ではないと思うので、そのうち類似の事例やベストな解決策が見つかると思う多分...

何かわかったら追記予定。

関連