2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

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

Last updated at Posted at 2021-09-10

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

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?