Функция unsafe.Sizeof
Функция unsafe.Sizeof возвращает размер в байтах,
который занимает переданное ей значение в памяти компьютера.
В первый параметр мы передаем значение любого типа,
а функция возвращает его размер в виде числа типа
uintptr. Эта функция находится в пакете
unsafe и относится к низкоуровневым операциям,
поэтому требует осторожного использования.
Синтаксис
unsafe.Sizeof(value)
Пример
Давайте получим размер целого числа типа
int:
package main
import (
"fmt"
"unsafe"
)
func main() {
var num int = 42
res := unsafe.Sizeof(num)
fmt.Println(res)
}
Результат выполнения кода:
"8"
Пример
Давайте сравним размеры различных числовых типов:
package main
import (
"fmt"
"unsafe"
)
func main() {
var i8 int8 = 1
var i16 int16 = 1
var i32 int32 = 1
var i64 int64 = 1
fmt.Println(unsafe.Sizeof(i8))
fmt.Println(unsafe.Sizeof(i16))
fmt.Println(unsafe.Sizeof(i32))
fmt.Println(unsafe.Sizeof(i64))
}
Результат выполнения кода:
"1"
"2"
"4"
"8"
Пример
Давайте получим размер строки и слайса:
package main
import (
"fmt"
"unsafe"
)
func main() {
str := "abcde"
slice := []int{1, 2, 3, 4, 5}
fmt.Println(unsafe.Sizeof(str))
fmt.Println(unsafe.Sizeof(slice))
}
Результат выполнения кода:
"16"
"24"
Пример
Давайте получим размер структуры с полями разных типов:
package main
import (
"fmt"
"unsafe"
)
type Person struct {
Name string
Age int32
IsActive bool
}
func main() {
p := Person{Name: "John", Age: 30, IsActive: true}
res := unsafe.Sizeof(p)
fmt.Println(res)
}
Результат выполнения кода:
"24"
Смотрите также
-
функцию
unsafe.Alignof,
которая возвращает выравнивание значения в памяти -
функцию
unsafe.Offsetof,
которая возвращает смещение поля структуры в байтах -
тип
unsafe.Pointer,
который позволяет работать с указателями произвольных типов -
функцию
unsafe.Add,
которая выполняет арифметику указателей