📦 Как оптимизировать struct в Go: выравнивание, паддинг и порядок полей
Когда ты работаешь с Go и структурой данных (`struct`), порядок полей — это не просто эстетика. Это напрямую влияет на:
• размер занимаемой памяти
• эффективность использования кэша
• и в итоге — на производительность твоей программы.
Автор [buarki на DEV.to](https://dev.to/buarki/optimizing-struct-layout-and-padding-in-practice-23p1) показывает, как правильно выстраивать поля в структурах, чтобы избежать лишнего паддинга и сделать struct более компактным и быстрым.
🔍 Что такое padding?
Go автоматически выравнивает поля структур по их размеру. Например:
type Bad struct {
a bool // 1 байт
b int64 // 8 байт
c bool // 1 байт
}
Кажется, что struct должен занимать 10 байт. Но из-за выравнивания Go вставит паддинг, и итоговый размер окажется 24 байта.
✅ Как это исправить?
Меняем порядок полей:
type Good struct {
b int64 // 8 байт
a bool // 1 байт
c bool // 1 байт
}
Теперь структура занимает 16 байт, а не 24 — и всё благодаря грамотному размещению полей.
📌 Рекомендации:
• Сортируй поля от самых крупных к самым мелким
• Группируй однотипные поля
• Избегай перемешивания
bool`/`byte
с int64`/`float64
• Используй визуализацию (например, viztruct) для анализа struct'ов
• Проверяй размер struct через
unsafe.Sizeof()
🎯 Это особенно важно при:
• массовом использовании struct в массивах и слайсах
• передаче struct между потоками
• работе с бинарными протоколами или mmap
📖 Подробнее с примерами: https://dev.to/buarki/optimizing-struct-layout-and-padding-in-practice-23p1
>>Click here to continue<<
