2
1

More than 3 years have passed since last update.

【Golang】構造体の並び順を自動で整える(govet の fieldalignment エラーの自動修正)

Posted at

Struct構造体Field Alignmentフィールドの並び で叱られる

Go 言語の総合 lint ツールの golangci-lint で、govet の linter が「構造体の並び順にメモリの無駄がある」と指摘してきます。

ほらgolang叱られた
fieldalignment: struct with N pointer bytes could be M (govet)

この、govetfieldalignment エラーが出るたび、構造体のフィールドの並びをコピペピピックするトライ&エラーでわけわかめになるのが面倒なのです。「"go" golang fieldalignment govet フィールド 並び順 修正」でググっても出てこなかったので、自分のググラビリティとして。

TL; DR (今北産業)

  1. fieldalignment には -fix オプションがあるので、それ(自動修復)を使うと便利。
    • golangci-lint run --fix すると、他の linter の自動修正も適用されてしまうので注意。fieldalignment コマンドを別途入れておくと勝手が良い。
  2. 単体コマンドとしてもインストールできる。

    • 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
    
  3. 当然ですがフィールドの並び順が変わるので、既存のオブジェクト作成箇所に注意。

    • テストなど、構造体の新規オブジェクトを a := &myStruct{"foo","bar", 123} のように「フィールド名指定なし」で指定しているとエラーになるので、並びを合わせます。

動作確認

  • go version go1.17 linux/amd64 @ golang:1.17-alpine Docker image

参考文献

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1