golangci-lint に叱られる

私は Go 言語コードを ATOM エディタおよび go-plus パッケージで書いているのだが,最近の go-plus は lint に以下のツールを選択できるようだ。

特に golangci-lintgometalinter より5倍も速いと豪語してるので,こちらを試してみることにした。 GolangCI も気になるが,それはまたいつか。

いやぁ,最近の lint は賢いんだね。 特に古いコードのまま放置している部分についてどえら叱られたですよ。 ボーっと生きててすみません(笑)

error を無視すんな

例えば io.Reader から io.Writer へデータを流し込むのにやっつけコードで

io.Copy(writer, reader)

とか書くことがあるが golangci-lint にかけたら「返り値の error を無視すんなや」って叱られた。 ちゃんと書くなら

if err := io.Copy(writer, reader); err != nil {
    ...
}

とかすべき,ということだろう。 明示的に返り値の error を無視するなら

_ = io.Copy(writer, reader)

などと書けば,とりあえず叱られない。 まぁ安直にこう書いてしまうのは問題だけど。

true は不要

無限ループについて昔は何となく

for true {
    ...
}

とか書いていて,またも「true とか要らんけぇ」と叱られた。 正しくは

for {
    ...
}

でよい。 こういう「若気の至り」なコードがそこかしこに残ってて,黒歴史を見せられてるようでちょっと恥ずかしい。

SIGNAL のバッファリング

SIGNAL を channel として登録する際に誤って

ch := make(chan os.Signal)
signal.Notify(ch, sig...)

とか書いていて「ちゃんとバッファリングさせろや,ゴラァ」とまたまた叱られた。 正解は

ch := make(chan os.Signal, 1)
signal.Notify(ch, sig...)

そんなことまで知っている golangci-lint は偉いねぇ。

Lint は知見のかたまり

というわけで過去の恥ずかしいコードが次々と発覚してしまい,公開しているコードのリファクタリングを行っている真っ最中である。 色々やりたいことがあるのに横道に逸れてばっかり。

C 言語で書いてた頃は MISRA-C とかいった「事実上の標準」みたいなのがあって lint ツールとかも(少なくともエンタープライズ向けは)そういったものに準拠したものが色々あった。 Lint ってのはそのプログラミング言語に関する知見のかたまりなので上手に使いこなしていきたいものである。

ブックマーク

参考図書

photo
プログラミング言語Go (ADDISON-WESLEY PROFESSIONAL COMPUTING SERIES)
Alan A.A. Donovan (著), Brian W. Kernighan (著), 柴田 芳樹 (翻訳)
丸善出版 2016-06-20
単行本(ソフトカバー)
4621300253 (ASIN), 9784621300251 (EAN), 4621300253 (ISBN), 9784621300251 (ISBN)
評価     

著者のひとりは(あの「バイブル」とも呼ばれる)通称 “K&R” の K のほうである。この本は Go 言語の教科書と言ってもいいだろう。

reviewed by Spiegel on 2018-10-20 (powered by PA-APIv5)

photo
組込み開発者におくるMISRA‐C:2004―C言語利用の高信頼化ガイド
MISRA‐C研究会 (編集)
日本規格協会 2006-10
Book 単行本
ASIN: 4542503461, EAN: 9784542503465
評価     

私が持っているのはこれよりひとつ古い版だが,まぁいいか。むかし,車載用の組み込みエンジニアをやっていた頃は必読書として読まされました。今はもっと包括的な内容のものがあるはず。

reviewed by Spiegel on 2019-02-06 (powered by amazon-item 0.2.1)