Golang Books
17K subscribers
314 photos
4 videos
335 files
296 links
Библиотека Golang разработчика

По всем вопросам- @haarrp

@Golang_google - Golang

@golangl - golang chat

@GolangJobsit - golang channel jobs

@golangtests golang tests

@itchannels_telegram - 🔥лучшие ит-каналы

№ 5032829002
Download Telegram
💡 Структуры в Go: под капотом они интереснее, чем кажется

На первый взгляд struct — это просто контейнер с полями. Но стоит углубиться, и появляются вопросы:

- Почему структура занимает больше памяти, чем сумма её полей?
- Почему одни структуры можно сравнивать и использовать как ключ в map, а другие — нет?

🗄️ Память, выравнивание и паддинг
Go хранит поля в памяти в порядке объявления. Чтобы данные были выровнены по границам процессора, компилятор добавляет "пустые байты" — padding.


type A struct {
B bool // 1 byte (+7 padding)
I int64 // 8 bytes
}
// Sizeof(A) = 16

type B struct {
I int64 // 8 bytes
B bool // 1 byte (+7 padding)
}
// Sizeof(B) = 16


Хотя тут одинаково, в больших структурах порядок полей может сэкономить десятки байт.
👉 Лайфхак: ставьте "тяжёлые" типы (int64, float64) выше "лёгких" (bool, byte), чтобы сократить паддинг.

⚖️ Сравнимость и ключи в map
Структуры можно сравнивать (==) и использовать как ключи в map, если все поля сравнимые.


type KeyGood struct {
ID int
Name string
}
// сравнимо, работает как ключ

type KeyBad struct {
Data []byte
}
// ошибка: []byte несравнимый тип


Как обойти:

Использовать фиксированный массив:

type KeyArr struct { Digest [16]byte }


Преобразовать срез в строку:

key := string(digestBytes)
m := map[string]string{key: "value"}


Или хранить хэш (uint64, строка) вместо самого среза.

📌 Вывод: структуры в Go — это не только про хранение данных. Зная про выравнивание и правила сравнимости, можно писать код, который будет и эффективным по памяти, и удобным в работе с map.

#golang #struct #memory #map
19🔥8👍5🥰1
👣 Go 1.25.3 и Go 1.24.9 - исправление ошибок после обновления безопасности

Команда Go выпустила минорные версии 1.25.3 и 1.24.9, чтобы устранить проблемы, появившиеся после предыдущего патча (1.25.2 и 1.24.8).

Тогда была введена слишком строгая проверка X.509-сертификатов, из-за чего часть приложений перестала работать.
Теперь эти ограничения удалены, но исправление уязвимости сохранено.

Разработчики приносят извинения и рекомендуют всем обновиться.
Подробнее: go.dev/doc/devel/release#go1.25.3

📡 Анонс: https://groups.google.com/g/golang-announce/c/YEyj6FUNbik/m/_SDlIvxuCAAJ

⬇️ Скачать: https://go.dev/dl/#go1.25.3

👉 Зеркало в Max

@Golang_google

#golang
Please open Telegram to view this post
VIEW IN TELEGRAM
👍4