РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
1197 of 1593 menu

Функция binary.Size

Функция binary.Size из пакета encoding/binary возвращает размер в байтах, который занимает значение при сериализации с помощью функций binary.Write или binary.Read. Она принимает один параметр - произвольное значение v, для которого нужно вычислить размер. Возвращает целое число int - количество байт или отрицательное значение, если размер не может быть определен.

Синтаксис

binary.Size(v any) int

Пример для чисел с фиксированным размером

Функция корректно вычисляет размер для всех целых и чисел с плавающей точкой фиксированной длины:

package main import ( "encoding/binary" "fmt" ) func main() { var num8 uint8 = 255 var num16 int16 = -32000 var num64 float64 = 3.14 fmt.Println(binary.Size(num8)) fmt.Println(binary.Size(num16)) fmt.Println(binary.Size(num64)) }

Результат выполнения кода:

1 2 8

Пример для сложных структур

Размер структуры определяется суммой размеров всех ее полей с учетом выравнивания, если не используется тег binary для компактной упаковки:

package main import ( "encoding/binary" "fmt" ) type Data struct { ID uint32 Flag bool Age int16 } func main() { data := Data{ID: 1, Flag: true, Age: 25} fmt.Println(binary.Size(data)) }

Результат выполнения кода (зависит от архитектуры и выравнивания):

8

Пример с использованием тега для управления размером

С помощью тега binary можно явно задать размер полей, что повлияет на возвращаемое значение binary.Size:

package main import ( "encoding/binary" "fmt" ) type Custom struct { Value uint16 `binary:"little"` _ [2]byte } func main() { c := Custom{Value: 100} fmt.Println(binary.Size(c)) }

Результат выполнения кода:

4

Пример для указателей и интерфейсов

При передаче указателя функция вычисляет размер значения, на которое он ссылается. Для интерфейсов возвращается размер динамического значения:

package main import ( "encoding/binary" "fmt" ) func main() { var val int32 = 42 ptr := &val var iface any = int64(1234567890) fmt.Println(binary.Size(ptr)) fmt.Println(binary.Size(iface)) }

Результат выполнения кода:

4 8

Смотрите также

  • функцию binary.Read,
    которая читает бинарные данные в структуру
  • функцию binary.Write,
    которая записывает бинарное представление значения
  • константу binary.BigEndian,
    которая определяет порядок байтов от старшего к младшему
  • константу binary.LittleEndian,
    которая определяет порядок байтов от младшего к старшему
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить