gocheckcompilerdirectives は Go のコンパイラディレクティブ(//go: コメント)が正しい形式かをチェックするツールです。
解決する問題
Go のコンパイラディレクティブ(//go:embed、//go:generate、//go:build など)は //go: の形式で記述する必要があります。// と go: の間にスペースが入ると通常のコメントとして扱われ、コンパイラに無視されます。この誤りはコンパイルエラーにならないため、気づかないまま意図した動作をしなくなります。
1 2 3 4 5 6 7 8
| package main
var configData string
type Status int
|
1 2 3 4 5 6 7 8
| package main
var configData string
type Status int
|
設定
公式ドキュメント
設定オプションはありません。有効化するだけで動作します。
1 2 3 4 5 6
| version: "2"
linters: enable: - gocheckcompilerdirectives
|
オプション
golangci-lint 経由では設定オプションはありません。
サンプル
検出例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
var schemaSQL string
var templateHTML string
type Repository interface { FindByID(ctx context.Context, id string) (*User, error) }
package integration_test
|
修正例
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| var schemaSQL string
var templateHTML string
type Repository interface { FindByID(ctx context.Context, id string) (*User, error) }
package integration_test
|
注意点
- コンパイラディレクティブの誤りはコンパイルエラーにならないため、手動で発見するのが困難。この Linter で自動検出するのが効果的
//go:embed、//go:generate、//go:build、//go:noinline、//go:linkname など、すべてのコンパイラディレクティブが対象
- ディレクティブ名のスペルミス(
//go:embod など)も検出される
- IDE のフォーマッターが
//go: の後にスペースを挿入してしまうケースがあるため、CI での自動チェックが有効
参考リンク