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.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