Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpEmEP 21 of 280 menu
◀ ▶

Встроенный указатель в Go

Вместо значения внутреннего типа можно встроить указатель на него. Запись в объявлении ставит звездочку перед именем типа. Тогда внешнее значение делит одну внутреннюю запись с тем, кто хранит этот указатель.

Пока указатель пуст, обращение к поднятому полю через внешнее значение останавливает программу. Ниже рабочий вариант, где указатель уже задан:

package main import "fmt" type Address struct { City string } type User struct { *Address Name string } func main() { u := User{ Address: &Address{City: "oslo"}, Name: "ann", } fmt.Println(u.City) u.Address.City = "berlin" fmt.Println(u.City) }

Город читают как поднятое поле. Запись через u.Address меняет ту же память, поэтому повторное чтение коротким путем показывает новый текст. Без инициализации указателя такой доступ не безопасен.

В литерале внешней структуры для указателя берут адрес готового значения или переменной внутреннего типа, как при обычной работе с указателями.

Дана структура:

package main import "fmt" type Address struct { City string } type User struct { *Address Name string } u := User{ Address: &Address{City: "oslo"}, Name: "ann", }

Измените город через поднятое поле и выведите его через Address.

Дан следующий код:

package main import "fmt" type Address struct { City string } type User struct { *Address Name string } var u User

Скажите, что произойдет при чтении города у u без присваивания указателя.

Объявите User со встроенным *Address, создайте значение с непустым указателем и выведите поднятое поле.

← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить