bon now

ありのままの現実を書き殴る吐き溜め。底辺SEの備忘録。
Written by bon who just a foolish IT Engineer.

Go言語をVSCodeで開発するための最初の一歩

Created Date: 2023/04/10 02:23
Updated Date: 2024/01/01 14:47

Go言語開発をVSCodeで真面目にやり始めて数ヶ月経った。様々な苦労のなか、ようやくLinterやファイル保存時の自動フォーマットがまともにできるようになったので、そのプロジェクトのテンプレートを作ってみた。

https://github.com/bon10/go-develop-template

工夫したところ

Linterとしてgolangci-lintを採用

golangci-lintは大量のlinterを内蔵している便利なlinter。 どういうlinterがあってそれぞれどういう役割りなのかは以下のサイトがとても参考になった。
golangci-lintを理解する - golangci-lint に搭載されている linter を学ぶ

linterを最大限に使うために動かしてみて競合が起きてしまったものや、goのバージョンが適用しないものなどを都度disableに追加していった。そのため、人やプロダクトによってはもっとdisableに追加する必要があるかもしれない。

gofumptを採用

linterやVSCodeのためのフォーマッタに、 gofumpt というgofmtやgoimportよりも制約の多いフォーマッタを使っている。 これを使うためにLanguage Serverとしてgoplsを立ち上げる必要があったり、golangci-lintを使うためにちょっと工夫が必要だったりして割と大変だった。
この工夫とは、 .golancgi.yml の以下の部分である。

1
2
3
4
linters-settings:
  gofumpt:
    lang-version: '1.20'
    module-path: growthstock/api

この指定がない場合、golangci-lintとVSCodeでフォーマットの相違が出てしまうため保存/git commitのたびにimport文の順序が違うということが起きていた。(実はgolangci-lintのドキュメントにちゃんと書いてあるので読んでおけば全く問題なかったのだが……)

そんな感じで、今後新しいプロジェクトをGoでやる場合のテンプレとして使っていこうと思っている。

local_offer
folder work