Golint < Json should be JSON!

f:id:dojineko:20170216213454j:plain

「えっ、そんなん言われても・・・」


使ってますか Golint

github.com

この子です。Golangを使ってるときには欠かせない(はず)の静的解析ツールです。

細かな関数名のスペルだったり、明らかに冗長なコードを書いていたり、
あるいは公開している関数や構造体なのにドキュメントコメントが無い場合などなど
色々アドバイスをくれる憎いやつです。

具体的にどんなことしてくれるのかは下記のスライドが詳しかったので紹介します。

www.slideshare.net

Golint の簡単な使い方

導入は go get から簡単に行なえます。

go get -u github.com/golang/lint/golint

usage がそのままなので抜粋します。
基本形は golint hoge.gogolint package-name です。

$ golint -h
Usage of golint:
    golint [flags] # runs on package in current directory
    golint [flags] [packages]
    golint [flags] [directories] # where a '/...' suffix includes all sub-directories
    golint [flags] [files] # all must belong to a single package
Flags:
  -min_confidence float
        minimum confidence of a problem to print it (default 0.8)
  -set_exit_status
        set exit status to 1 if any issues are found

ガツンとカレントディレクトリ配下全てのチェックを行う場合は下記のようにします。

# カレントディレクトリ配下のチェックを行う
golint ./...

Json should be JSON

ここで1つされやすい(と思われる)警告を例に上げてみます。

一般的な略語(URLとかXSSとかSSHとか) については合致するものは例えば、
Url や XssSsh と言うように記述しているときに警告されます。

その時は

func hogeFugaJson should be hogeFugaJSON

というように警告されます。

定義されている略語は下記のようになっています。

lint/lint.go at b8599f7d71e7fead76b25aeb919c0e2558672f4a · golang/lint · GitHub

とはいえチェックが五月蠅すぎる・・・

という場合はあると思うので、あくまで最終的な手段として
min_confidence というパラメータを設定することができます。

これは golint を実行した際に警告される最低レベルを実数で設定するとができます。
具体的には下記のような感じです。

golint ./... -min_confidence=1

デフォルトでは Usageにもあったように 0.8 で動作しています。

各解析結果を警告するかどうかはそれぞれで動作する段階があり、
例えば先のJson/JSON問題で言えば下記の行で指定がされており
0.8 で動作するようになっていることがわかります。

lint/lint.go at b8599f7d71e7fead76b25aeb919c0e2558672f4a · golang/lint · GitHub

つまり、この場合は0.9以上の値にすればこの警告については黙ってくれるということになるわけですね。

とはいえ難しいものでなければ可能な限りデフォルトで実行されるgolintに対応できると気持ち良いのではないかと思います

ブックマーク

www.pakutaso.com