Struct の Field Alignment で叱られる
Go 言語の総合 lint ツールの golangci-lint で、
govet
の linter が「構造体の並び順にメモリの無駄がある」と指摘してきます。ほらgolang叱られたfieldalignment: struct with N pointer bytes could be M (govet)
この、govet
の fieldalignment
エラーが出るたび、構造体のフィールドの並びをコピペピピックするのが面倒なのです。「"go" golang fieldalignment govet フィールド 並び順 修正」でググっても出てこなかったので、自分のググラビリティとして。
TL; DR (今北産業)
-
fieldalignment
には-fix
オプションがあるので、それ(自動修復)を使うと便利。-
golangci-lint run --fix
すると、他の linter の自動修正も適用されてしまうので注意。fieldalignment
コマンドを別途入れておくと勝手が良い。
-
-
単体コマンドとしてもインストールできる。
golang.org/x/tools/go/analysis/passes/fieldalignment/cmd/fieldalignment@latest
go install golang.org/x/tools/go/analysis/passes/fieldalignment/cmd/fieldalignment@latest
fieldalignment -fix ./lib/mypackage
-
当然ですがフィールドの並び順が変わるので、既存のオブジェクト作成箇所に注意。
- テストなど、構造体の新規オブジェクトを
a := &myStruct{"foo","bar", 123}
のように「フィールド名指定なし」で指定しているとエラーになるので、並びを合わせます。
- テストなど、構造体の新規オブジェクトを
動作確認
-
go version go1.17 linux/amd64
@ golang:1.17-alpine Docker image
参考文献
-
github.com/mdempsky/maligned (
fieldalignment
のオリジナル) @ GitHub - fieldalignment package @ pkg.go.dev
- x/tools/go/analysis/passes/fieldalignment: add a command? | #43446 | go | golang @ github.com