Встроенная структура в 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.Name)
fmt.Println(u.Address.City)
}
В литерале внешней структуры внутреннюю часть
заполняют по имени типа Address. Поле
Name задают как обычно. Полный путь
u.Address.City по прежнему работает
и указывает на тот же город, что лежит внутри.
Тот же прием подойдет, когда внутренний тип хранит несколько полей, а внешний добавляет свои данные рядом с ними.
Объявите Address с полем City,
User со встроенным Address
и полем Name. Создайте значение
с городом "rome" и именем "leo"
и выведите имя и город через 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 внутри User: одно
или два.