Menu
Coddy logo textTech

Инициализация структур

Часть раздела Объектно-ориентированное программирование путешествия по GO на Coddy — урок 9 из 107.

Go предоставляет несколько способов инициализации структур, каждый из которых полезен в различных ситуациях.

Инициализация именованных полей

type Person struct {
    Name string
    Age  int
    City string
}

p1 := Person{
    Name: "Alice",
    Age:  25,
    City: "New York",
}

Позиционная инициализация (порядок должен соответствовать объявлению полей)

p2 := Person{"Bob", 30, "London"}

Инициализация нулевыми значениями (все поля получают значения по умолчанию)

p3 := Person{}
// Name: "", Age: 0, City: ""

Частичная инициализация (неустановленные поля получают нулевые значения)

p4 := Person{Name: "Charlie"}
// Name: "Charlie", Age: 0, City: ""

Указатель на структуру с использованием &

p5 := &Person{
    Name: "Diana",
    Age:  28,
    City: "Paris",
}
fmt.Println(p5.Name) // Diana

Использование var с последующим присвоением значений полям

var p6 Person
p6.Name = "Eve"
p6.Age = 22

Инициализация именованных полей — самый распространенный и читаемый подход. Используйте &, когда вам нужен указатель на структуру.

challenge icon

Задание

Средне

Создайте три объекта Player, используя различные методы инициализации:

  • player1: Инициализация именованных полей с использованием входных значений
  • player2: Инициализация именованных полей со значениями Name: "Guest", Class: "Novice", HitPoints: 50
  • player3: Используйте объявление var, а затем присвойте значение каждому полю по отдельности

Шпаргалка

Go предоставляет несколько способов инициализации структур:

Инициализация с именованными полями (наиболее распространенная и читаемая):

p1 := Person{
    Name: "Alice",
    Age:  25,
    City: "New York",
}

Позиционная инициализация (порядок должен соответствовать объявлению полей):

p2 := Person{"Bob", 30, "London"}

Инициализация со значениями по умолчанию (все поля получают значения по умолчанию):

p3 := Person{}
// Name: "", Age: 0, City: ""

Частичная инициализация (неуказанные поля получают значения по умолчанию):

p4 := Person{Name: "Charlie"}
// Name: "Charlie", Age: 0, City: ""

Указатель на структуру с использованием &:

p5 := &Person{
    Name: "Diana",
    Age:  28,
}
fmt.Println(p5.Name) // Diana

Использование var с последующим присваиванием значений полям:

var p6 Person
p6.Name = "Eve"
p6.Age = 22

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

package main

import "fmt"

func main() {
    var name, class string
    var hp int
    fmt.Scan(&name, &class, &hp)

    // TODO: Создайте player1, используя инициализацию именованных полей с входными значениями

    // TODO: Создайте player2, используя инициализацию именованных полей:
    // Name: "Guest", Class: "Novice", HitPoints: 50

    // TODO: Создайте player3, используя объявление var, затем присвойте значения полям:
    // Name: "Hero", Class: "Knight", HitPoints: 200

    fmt.Printf("Player 1: %s (%s) - HP: %d\n", player1.Name, player1.Class, player1.HitPoints)
    fmt.Printf("Player 2: %s (%s) - HP: %d\n", player2.Name, player2.Class, player2.HitPoints)
    fmt.Printf("Player 3: %s (%s) - HP: %d\n", player3.Name, player3.Class, player3.HitPoints)
}
quiz iconПроверьте себя

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

Все уроки раздела Объектно-ориентированное программирование