Литерал структуры
Литерал структуры в Go используется для создания нового экземпляра структуры с указанием значений ее полей. Существует два способа создания литерала: с указанием имен полей и без них. При создании литерала без имен полей значения должны передаваться в том же порядке, в котором поля объявлены в структуре. Второй способ является более предпочтительным, так как он делает код более читаемым и менее подверженным ошибкам при изменении структуры.
Синтаксис
// С указанием имен полей
StructName{
Field1: value1,
Field2: value2,
}
// Без указания имен полей
StructName{value1, value2}
Пример
Давайте создадим структуру Person и инициализируем ее
с помощью литерала с указанием имен полей:
package main
import "fmt"
type Person struct {
Name string
Age int
}
func main() {
p := Person{
Name: "Alice",
Age: 30,
}
fmt.Println(p)
}
Результат выполнения кода:
{Alice 30}
Пример
Теперь создадим экземпляр структуры Person без указания имен полей:
package main
import "fmt"
type Person struct {
Name string
Age int
}
func main() {
p := Person{"Bob", 25}
fmt.Println(p)
}
Результат выполнения кода:
{Bob 25}
Пример
При создании литерала можно указать не все поля. Неуказанные поля получат нулевые значения по умолчанию:
package main
import "fmt"
type Person struct {
Name string
Age int
}
func main() {
p := Person{Name: "Charlie"}
fmt.Println(p)
}
Результат выполнения кода:
{Charlie 0}
Пример
Литералы структур можно использовать для создания вложенных структур.
Создадим структуру Employee, которая содержит структуру Person:
package 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)
}
Результат выполнения кода:
{{David 28} Developer}
Смотрите также
-
объявление структуры
struct,
которое определяет новый тип данных -
поля структуры
fields,
которые хранят данные экземпляра -
доступ к полям
field access,
который позволяет получать и изменять значения полей -
указатели на структуры
pointer,
которые позволяют эффективно работать с большими структурами