go modulesに移行したらvscodeがまだ微妙だった

今やってるやつで dep から go modules にしたらvscodeの対応がイマイチだったのでメモ。 ついでにlanguage-serverの対応もする。

現状がここにまとまってる。 github.com

やったこと

  • goenv使っててvscodeで使ってたgoが古かったのでgoroot設定してgoenvで使ってるやつに直した
    • 実はvscodeのgoroot設定するだけではダメで、shellの設定からどのgoを使うか決定しているのでデフォルトのshellがbashの場合bashの設定ファイルにgoenvの設定が必要。普段zshにログインしているから気づかなかった
    • やらないとvscode上で使われるgoが古かったりする
    • langserverの起動に使われるgoはvscodeのshellをzshにしてもbashが使われるのでbashの設定にgoenvの設定を書く必要がある
  • ms-vscode.goが0.8.0以上か確認
  • Go: Install/Update Tools から gocode-gomod と godef-gomod と go-langserver インストール
  • langserverを入れる。go getでインストールできなかったのでcloneしてgo install GitHub - saibing/bingo: Bingo is a Go language server that speaks Language Server Protocol.
  • vscodeに以下の設定を入れる
"go.useLanguageServer": true,
    "go.alternateTools": {
        "go-langserver": "bingo"
    },
"go.languageServerExperimentalFeatures": {
    "format": false,
    "autoComplete": true,
    "rename": true,
    "goToDefinition": true,
    "hover": true,
    "signatureHelp": true,
    "goToTypeDefinition": true,
    "goToImplementation": true,
    "documentSymbols": true,
    "workspaceSymbols": true,
    "findReferences": true
}

goのversion切り替えツール使ってるとvscodeでどのversion使われるかでハマりがち。