создается ли пустая структура в Golang каждый раз при ее объявлении?
всем привет. собственно вопрос в сабже. похожий вопрос не нашел ранее. как компилятор Go 1.18 компилирует экземпляр пустой структуры (где пустая структура = type DummyStruct struct{})?
- он каждый раз выделяет память?
- или создает одну и заменяет все пустые структуры указателями на нее?
- или кидает туда "условное ничего", типа nil?
Ответы (1 шт):
Автор решения: Alexander Pavlov
→ Ссылка
или создает одну и заменяет все пустые структуры указателями на нее?
Да. Причём это работает и даже если два разных типа объявлены как пустая структура
package main
import "fmt"
type DummyStruct struct{}
type DummyStruct2 struct{}
func main() {
a := DummyStruct{}
b := DummyStruct{}
c := *new(DummyStruct)
d := *new(DummyStruct)
fmt.Printf("%T %T %T %T\n", a, b, c, d)
fmt.Printf("%p %p %p %p\n", &a, &b, &c, &d)
fmt.Printf("%#v %#v %#v %#v\n", a, b, c, d)
println()
a2 := DummyStruct2{}
b2 := DummyStruct2{}
c2 := *new(DummyStruct2)
d2 := *new(DummyStruct2)
fmt.Printf("%T %T %T %T\n", a2, b2, c2, d2)
fmt.Printf("%p %p %p %p\n", &a2, &b2, &c2, &d2)
fmt.Printf("%#v %#v %#v %#v\n", a2, b2, c2, d2)
}
main.DummyStruct main.DummyStruct main.DummyStruct main.DummyStruct
0x551048 0x551048 0x551048 0x551048
main.DummyStruct{} main.DummyStruct{} main.DummyStruct{} main.DummyStruct{}
main.DummyStruct2 main.DummyStruct2 main.DummyStruct2 main.DummyStruct2
0x551048 0x551048 0x551048 0x551048
main.DummyStruct2{} main.DummyStruct2{} main.DummyStruct2{} main.DummyStruct2{}