goheader はソースファイルの先頭にある著作権ヘッダーがテンプレートと一致するかをチェックするツールです。
解決する問題
企業やオープンソースプロジェクトでは、すべてのソースファイルにライセンスヘッダーを記載する必要があります。ファイル数が増えるとヘッダーの付け忘れやフォーマットの不一致が発生しやすくなります。
1 2 3 4 5 6 7 8 9
|
package main
import "fmt"
func main() { fmt.Println("hello") }
|
1 2 3 4 5 6 7 8 9 10 11 12
|
package main
import "fmt"
func main() { fmt.Println("hello") }
|
設定
公式ドキュメント
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| version: "2"
linters: enable: - goheader settings: goheader: values: const: COMPANY: MyCompany LICENSE: Apache-2.0 template: |- Copyright {{ YEAR }} {{ COMPANY }} SPDX-License-Identifier: {{ LICENSE }}
|
オプション
| オプション |
型 |
デフォルト |
説明 |
template |
string |
"" |
ヘッダーのテンプレート文字列 |
template-path |
string |
"" |
テンプレートファイルのパス(template と排他) |
values.const |
map[string]string |
{} |
テンプレート内で使用する固定値 |
values.regexp |
map[string]string |
{} |
テンプレート内で使用する正規表現パターン |
ビルトインテンプレート変数
| 変数 |
説明 |
例 |
{{ YEAR }} |
現在の年 |
2025 |
{{ YEAR-RANGE }} |
年の範囲 |
2020-2025 |
サンプル
検出例
修正例
正規表現を使った柔軟なマッチング
1 2 3 4 5 6 7 8 9 10 11 12
| linters: settings: goheader: values: const: COMPANY: MyCompany regexp: YEAR_PATTERN: 20[2-9]\d(-20[2-9]\d)? template: |- Copyright {{ YEAR_PATTERN }} {{ COMPANY }} SPDX-License-Identifier: Apache-2.0
|
この設定で Copyright 2023 MyCompany や Copyright 2023-2025 MyCompany のいずれも受け入れられます。
注意点
template と template-path は排他的。両方指定するとエラーになる
- 生成されたファイル(
*.pb.go 等)は issues.exclude-rules でパスを除外するとよい
values.const と values.regexp はテンプレート内で {{ KEY }} として参照できる。再帰的な参照も可能
参考リンク