Следите за новинками
в нашем Telegram канале. Жми, чтобы подписаться:)
⊗goSpEmPF 18 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) fmt.Println(u.Address.City) }

Оба выражения берут одно и то же поле. Запись u.City и u.Address.City указывают на город внутри u. Если изменить город через любой из путей, второй путь покажет то же значение.

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

Даны переменные:

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

Выведите город поднятым полем и затем тем же город через встроенный тип.

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

package main import "fmt" type Address struct { City string } type User struct { Address Name string } u := User{ Address: Address{City: "berlin"}, Name: "mia", }

Запишите в поле города новый текст "paris" через поднятое имя и выведите город через Address.

Скажите, равны ли значения, прочитанные как u.City и как u.Address.City, если u не меняли между чтениями.

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