Menu
CoddyTech

Вложенные структуры

Часть раздела Основы путешествия по GO на Coddy. Урок 99 из 109.

Go позволяет встраивать одну структуру в другую, создавая отношения композиции. Так в Go реализовано наследование.

Определите две структуры, одну из которых встроить в другую:

type Address struct {
    city  string
    state string
}

type Person struct {
    name string
    age  int
    Address  // встроенная структура (без имени поля)
}

func main() {
    person := Person{
        name: "Alice",
        age: 30,
        Address: Address{city: "Portland", state: "Oregon"},
    }
    
    // Обращаемся к полям напрямую
    fmt.Println(person.city)  // Обращаемся к встроенному полю
}

Вывод показывает, что мы можем напрямую обращаться к полям встроенной структуры:

Portland
challenge icon

Задание

Новичок

В этом задании ты потренируешься использовать встроенные структуры (композицию) в Go.

У нас есть две структуры: Address и Person. Структура Person должна включать структуру Address, чтобы можно было напрямую обращаться к полям адреса.

Твоя задача — завершить определение структуры Person, включив в неё структуру Address. Операторы печати в main уже напрямую считывают поля адреса из объекта person (person.Street, person.City, person.ZipCode); они скомпилируются, как только структура Address будет включена.

Попробуйте сами

package main

import "fmt"

// Структура Address содержит информацию о местоположении
type Address struct {
	Street  string
	City    string
	ZipCode string
}

// Структура Person должна включать встроенную структуру Address
type Person struct {
	Name string
	Age  int
	// TODO: Встройте здесь структуру Address (всего одна строка)
}

func main() {
	// Создайте новый экземпляр Person с информацией об адресе
	person := Person{
		Name: "Alice",
		Age:  30,
		Address: Address{
			Street:  "123 Main St",
			City:    "Wonderland",
			ZipCode: "12345",
		},
	}

	// Выведите информацию о Person, включая адрес
	fmt.Println("Name:", person.Name)
	fmt.Println("Age:", person.Age)
	
	// Выведите поля адреса напрямую из экземпляра Person
	fmt.Println("Street:", person.Street)
	fmt.Println("City:", person.City)
	fmt.Println("ZipCode:", person.ZipCode)
}
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы

Потренируйтесь самостоятельно: Онлайн-компилятор Go