VSCode когда-то меня сильно порадовал, что это отличная IDE для Go практически сразу из коробки. Установил VSCode, установил одно расширение для Go, разрешил ему установить все нужные CLI зависимости, и готово. Без возни, и сразу все нужные фичи. Но с того момента всё сильно поменялось, и ручки всё-таки придётся подкрутить.
Выключаем “Use Language Server”. Он пока сырой, медленный, часто не может найти нужные пакеты. В общем, всё плохо. Единственное его преимущество в том, что он может делать свою магию прям в процессе набора кода, а не только при сохранении файла. В общем, всё будет круто, но ещё не скоро.
Включаем “Autocomplete Unimported Packages”, чтобы он умел подсказывать объекты, сигнатуры и всё такое до того, как пакет импортировали. Довольно удобно.
Включаем “Cover On Save” и “Cover On Single Test”. Coverage очень круто и красиво. Я когда первый раз изучал Go через TDD, мне это прям сильно понравилось, самое яркое впечатление.
В качестве “Format Tool” выбираем “goreturns”. Он, как несложно догадаться, умеет дополнять возвращаемые значения в функциях: подставить nil, пустую строку, всё такое. Красота.
Примечательно, что “Format Tool” селектор, а не чекбокс, и выбрать можно только один форматтер, а нам ещё нужен “goimports”, чтобы импорты дополнять. К счастью, у “goreturns” есть флаг, чтобы он после себя вызывал “goimports” (ох, вся эта экосистема состоит из костылей). Для этого в “Format Flags” добавляем “-i”.
В качестве “Lint Tool” выбираем golangci-lint и радуемся многообразию проверок, помогающих писать хороший код.
Вот конфиг, который можно подставить в settings.json
, и всё сразу будет:
"go.useLanguageServer": false,
"go.autocompleteUnimportedPackages": true,
"go.coverOnSave": true,
"go.coverOnSingleTest": true,
"go.formatTool": "goreturns",
"go.formatFlags": [
"-i"
],
"go.lintTool": "golangci-lint",
}```
А ещё я решил попробовать [go-parsefix](https://github.com/quasilyte/go-parsefix) — автоматическую фиксилку синтаксиса. Ну там двоеточие в switch поставить, пропущенные запятые, всё такое. Штука сырая и багованная, но иногда работает. Интегрировать её можно через [Run on Save (MEDIUS)](https://marketplace.visualstudio.com/items?itemName=medius.runonsave) плагин. Ставьте именно этот, остальные глючат. Вот конфиг для него:
```{
"medius.runonsave": {
"commands": [
{
"match": ".*\\.go",
"cmd": "parsefix -inplace -f=${file}"
}
]
}
}```
Удачи :)