Создание переменной создает копию, разыменование - нет.Зачем? - PullRequest
0 голосов
/ 27 марта 2019

Почему помещение значения в переменную создает копию, а разыменование - нет?

Это простая оптимизация компилятора, который знает, что он может просто использовать адрес исходной структуры, а при создании переменной всегда выделяется новая память?

Пример 1:

x1 := &struct{ x int }{x: 0}
y1 := *x1
z1 := &y1
z1.x++

fmt.Printf("--- 1:\n%#v\n%#v\n", x1, z1)

Пример 2:

x2 := &struct{ x int }{x: 0}
z2 := &*x2
z2.x++

fmt.Printf("--- 2:\n%#v\n%#v\n", x2, z2)

Беги сюда: https://play.golang.org/p/myugNmjrQFj

Есть ли часть документации go, которая описывает это поведение?

1 Ответ

0 голосов
/ 27 марта 2019

Есть ли часть документации go, которая описывает это поведение?

Да, языковая спецификация. Смотри https://golang.org/ref/spec

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...