linter が Go 1.27 に追いついていない
2026-08-15 時点の現況。時間が経てば変わる話なので、参照するときは日付を疑うこと。
golangci-lint: 最新リリース v2.12.2 (2026-05-06) は go1.26 でビルドされており go1.27 非対応。対応 PR golangci-lint #6642 "go1.27 support" は 2026-06-18 から draft のままで、2026-06-29 更新を最後に動いていない。方針は golangci-lint #6643 に明記されている。
golangci-lint supports Go versions that are lower or equal to the Go version used to build it.
リマインダ issue golangci-lint #6603 も open。Go 1.27 が正式リリースされても golangci-lint の対応はその後になる。 homebrew や nix のように古い Go でビルドする配布経路ではさらに遅れる。
実際に踏んだ例が unparam の panic (golangci-lint #6603, 2026-05-29 報告)。ldez が go1.27-devel で全 linter を評価して発見した。再現に必要なのはこれだけ:
type H struct{}
func (H) m[P any](P) {}
func main() { var h H; h.m[string]("foo") }
adonovan「これは本物の regression だ、すまない」。修正は CL 788380 (2026-06-08 merge)。詳しい原因は 静的解析から見たジェネリクスメソッド の MethodValue nil の項と同じもの。
staticcheck は x/tools/go/ssa ではなく honnef.co/go/tools/go/ir という独自 IR を持つため、x/tools 側の修正が及ばず独自に踏んだ。2026-06-07 に ldez のテストで stack overflow が発生し、2026-06-25 に Staticcheck 2026.2rc1 (v0.8.0-rc.1) としてプレリリースされている。2026-08-15 時点の最新安定版は v0.7.0 (2026-02-13) で generic methods 非対応。対応しているのは rc のみ。
さらに 2026-07-22 に go1.27rc2 + v0.8.0-rc.1 で「無限ループする」との報告 (corani) があった。CPU プロファイルは nilness lattice の Merge に集中していたが、結局 1.5〜2時間で完了しており (通常のフルスキャンは約5分)、真のハングではなく激遅だったと分かっている。2026-08-15 時点で原因未特定であり、generic methods 起因かどうかも確定していない。断定しないこと。
golint は 2021-05-09 にアーカイブ済みで generics (1.18) すら知らないので対象外。revive は 2026-08-15 時点で generic method / go1.27 に言及した issue が1件も無い。AST ベースのルールが中心で型情報への依存が薄いためだと考えられる。静的解析で generic methods が問題になっているのは、ほぼ全部 SSA や型情報を使う側であり、AST だけを見るツールはこの波及の外側にいる。
ジェネリクスメソッドを書き始めるときの現実的な障害は、コンパイラではなく CI の linter である、というのがこの話の落ちになる。エコシステム全体の対応状況は エクスポートデータ形式と UIR V4、言語機能そのものの背景は ジェネリクスメソッド (Go 1.27) を参照。
出典
Go Release Party 1.27 の発表資料リポジトリ memo.md §7、issues.md §6、golangci-lint #6603、golangci-lint #6642、golangci-lint #6643