Процессор читает память по выровненным адресам: int64 должен лежать на адресе, кратном 8. Компилятор добавляет padding (пустые байты) между полями для выравнивания. Порядок полей влияет на размер структуры:
// 24 байта (с padding)
type Bad struct {
a bool // 1 + 7 padding
b int64 // 8
c bool // 1 + 7 padding
}
// 16 байт (без лишнего padding)
type Good struct {
b int64 // 8
a bool // 1
c bool // 1 + 6 padding
}
Правило: сортируй поля от большего к меньшему. Инструмент fieldalignment из go vet подскажет оптимальный порядок.