いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-138 (staticcheck で警告をコメントで抑制する)

概要

よく忘れるのでメモメモ。

go lint が そのうち deprecated になるという

github.com

を見てから、staticcheck を利用するようにしているのですが、とても快適です。

staticcheck.io

んで、たまにですが 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/

今度は警告が出なくなりました。

参考資料

staticcheck.io


過去の記事については、以下のページからご参照下さい。

  • いろいろ備忘録日記まとめ

devlights.github.io

サンプルコードは、以下の場所で公開しています。

  • いろいろ備忘録日記サンプルソース置き場

github.com

github.com

github.com