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 ./mypackage/...使い方(自動修復)fieldalignment -fix ./mypackage/...使い方(go vet 経由)go vet -vettool=$(which 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