Литерал структуры

Литерал структуры в Go используется для создания нового экземпляра структуры с указанием значений ее полей. Существует два способа создания литерала: с указанием имен полей и без них. При создании литерала без имен полей значения должны передаваться в том же порядке, в котором поля объявлены в структуре. Второй способ является более предпочтительным, так как он делает код более читаемым и менее подверженным ошибкам при изменении структуры.

Синтаксис

go// С указанием имен полей
StructName{
  Field1: value1,
  Field2: value2,
}

// Без указания имен полей
StructName{value1, value2}

Пример

Давайте создадим структуру Person и инициализируем ее с помощью литерала с указанием имен полей:

gopackage main

import "fmt"

type Person struct {
  Name string
  Age  int
}

func main() {
  p := Person{
    Name: "Alice",
    Age:  30,
  }
  fmt.Println(p)
}

Результат выполнения кода:

go{Alice 30}

Пример

Теперь создадим экземпляр структуры Person без указания имен полей:

gopackage main

import "fmt"

type Person struct {
  Name string
  Age  int
}

func main() {
  p := Person{"Bob", 25}
  fmt.Println(p)
}

Результат выполнения кода:

go{Bob 25}

Пример

При создании литерала можно указать не все поля. Неуказанные поля получат нулевые значения по умолчанию:

gopackage main

import "fmt"

type Person struct {
  Name string
  Age  int
}

func main() {
  p := Person{Name: "Charlie"}
  fmt.Println(p)
}

Результат выполнения кода:

go{Charlie 0}

Пример

Литералы структур можно использовать для создания вложенных структур. Создадим структуру Employee, которая содержит структуру Person:

gopackage main

import "fmt"

type Person struct {
  Name string
  Age  int
}

type Employee struct {
  Person
  Position string
}

func main() {
  e := Employee{
    Person: Person{
      Name: "David",
      Age:  28,
    },
    Position: "Developer",
  }
  fmt.Println(e)
}

Результат выполнения кода:

go{{David 28} Developer}

Смотрите также

  • объявление структуры struct,
    которое определяет новый тип данных
  • поля структуры fields,
    которые хранят данные экземпляра
  • доступ к полям field access,
    который позволяет получать и изменять значения полей
  • указатели на структуры pointer,
    которые позволяют эффективно работать с большими структурами