Функция 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,
которая определяет порядок байтов от младшего к старшему