概要
よく忘れるのでメモメモ。
go lint が そのうち deprecated になるという
を見てから、staticcheck を利用するようにしているのですが、とても快適です。
んで、たまにですが staticcheck が出してくれている警告を意図的に抑制したいときがあります。
コメントで抑制できるので、ここにメモメモ。
https://staticcheck.io/docs#line-based-linter-directives
試してみる
以下のようなソースを記載したとします。
// staticcheck の 警告 を無視するやり方についてのサンプルです. // // REFERENCES: // - https://staticcheck.io/docs#line-based-linter-directives package main import ( "fmt" "os" ) func main() { f, err := os.Open("./go.mod") if err != nil { fmt.Println(err) } defer f.Close() // わざと err を利用しないままにしてる err = fn1() } func fn1() error { return nil }
Github Codespaces とか Gitpod で作業していると、コード書いている時点で警告を示す波線が表示されますが、一旦 staticcheckにかけてみましょう。
codespace ➜ /workspaces/try-golang (master) $ staticcheck ./cmd/ignore_staticcheck_warning/ cmd/ignore_staticcheck_warning/main.go:19:2: this value of err is never used (SA4006)
this value of err is never used (SA4006)
って教えてくれています。これを意図的に抑制したい場合はコメントで以下のように記載すると消えてくれます。
// staticcheck の 警告 を無視するやり方についてのサンプルです. // // REFERENCES: // - https://staticcheck.io/docs#line-based-linter-directives package main import ( "fmt" "os" ) func main() { f, err := os.Open("./go.mod") if err != nil { fmt.Println(err) } defer f.Close() //lint:ignore SA4006 It's ok because this is just a example. err = fn1() } func fn1() error { return nil }
//lint:ignore 識別番号 メッセージ
って形で指定します。メッセージには何か入力しないと有効になってくれません。
この状態で再度 staticcheck にかけてみると
codespace ➜ /workspaces/try-golang (master) $ staticcheck ./cmd/ignore_staticcheck_warning/
今度は警告が出なくなりました。
参考資料
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場