打印struct中Field内存对齐的小工具
版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | https://vearne.cc
1. 引言
因为使用golangci-lint时长有关于内存对齐的告警提示,所以做了一个小工具,可以查看struct中Field在内存中的对齐情况
传送门:
vearne/mem-align
2. 使用
package main
import (
        "github.com/vearne/mem-align"
)
type Car struct {
        flag bool
        age  int32
        F1   int8
        age2  int32
        age3  int16
        F2   int64
        F3   *int32
        InnerStruct struct{
                InnerByte byte
                //InnerStr string
        }
        F4   []byte
        Name string
        F5   error
}
func main(){
        memalign.PrintStructAlignment(Car{})
}
输出:

相同字符,相同颜色的的字符,表示同一个Field。
后记
其实golang官方在go vet中提供了一个子工具fieldalignment
golangci-lint也是使用这个分析器进行内存对齐的检查
安装 fieldalignment
go install golang.org/x/tools/go/analysis/passes/fieldalignment/cmd/fieldalignment@latest
使用-fix参数可以直接修改代码文件
fieldalignment -fix {packagePath}
参考资料
- opennota/check
- mdempsky/maligned
- Structure size optimization in Golang (alignment/padding)
- size and alignment guarantees
- fieldalignment
