Исходник не компилируется: неверно создана анонимная структура, в Sizeof переданы типы вместо значений, есть неиспользуемые импорты. После исправлений размеры зависят от архитектуры.
Какой вывод получит программа №31
Исходник не компилируется: неверно создана анонимная структура, в Sizeof переданы типы вместо значений, есть неиспользуемые импорты. После исправлений размеры зависят от архитектуры.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Определите, что будет выведено в консоль после выполнения следующего Go‑кода.
import (
"fmt"
"runtime"
"strconv"
"unsafe"
)
func main() {
person := struct {
balance float64
isTestProfile bool
age uint64
isDesktop bool
location struct{}
}()
fmt.Println(unsafe.Sizeof(person))
p := unsafe.Pointer(&person)
fmt.Println(unsafe.Sizeof(&p))
fmt.Println(unsafe.Sizeof([]struct{}))
fmt.Println(unsafe.Sizeof([5]int64))
fmt.Println(unsafe.Sizeof("h"))
}
Ответ
Исходник не компилируется: неверно создана анонимная структура, в Sizeof переданы типы вместо значений, есть неиспользуемые импорты. После исправлений размеры зависят от архитектуры.
Используйте person := struct { ... }{}, unsafe.Sizeof([]struct{}{}) и unsafe.Sizeof([5]int64{}); удалите runtime и strconv. На обычной Go/amd64-сборке значения: структура 32, указатель 8, заголовок слайса 24, массив пяти int64 40, строковый заголовок 16 байт. Sizeof строки и слайса не включает их данные. Пустое последнее поле и выравнивание тоже учитываются layout, поэтому складывать размеры полей напрямую нельзя.