package mainimport ( "fmt" "unsafe")type Foo struct { A int64}type IFoo interface { Get() int64}func (f Foo) Get() int64 { return f.A }func main() { var a int64 = 10 var s Foo = Foo{A: 42} var i IFoo = s fmt.Println(unsafe.Sizeof(a)) fmt.Println(unsafe.Sizeof(s)) fmt.Println(unsafe.Sizeof(i))}Вопросы • Сколько байт занимает a на x64?• Сколько байт занимает s?• Сколько байт занимает i?• Почему размер i не равен размеру Foo?• Что реально хранится внутри interface{} в Go?Разберём по шагам, как это работает в Go на x64.Код:```govar a int64 = 10var s Foo = Foo{A: 42}var i IFoo = s```1) Размер aunsafe.Sizeof(a)```goint64 = 8 байт```На x64:a = 8 байт2) Размер s```gotype Foo struct { A int64}```В структуре одно поле int64.```gos = 8 байт```3) Размер интерфейса i```govar i IFoo = sunsafe.Sizeof(i)```goНа x64:```goi = 16 байт```Запустить код: https://go.dev/play/p/NLIG3q-jFc9🧠 Хитрая Go-задача про интерфейсы и память (x64)Код:














