Ответ
Структура (struct
) в Go — это композитный тип данных, который позволяет сгруппировать вместе переменные (поля) разных типов под одним именем. Структуры являются основным способом создания сложных типов данных для представления сущностей из реального мира (например, Пользователь
, Продукт
).
type User struct {
ID int64
Name string
Email string
IsActive bool
}
Ключевые особенности и концепции:
-
Передача по значению: По умолчанию структуры передаются в функции по значению, то есть создается полная копия. Для изменения исходной структуры или для избежания копирования больших данных используют указатели (
*User
). -
Методы: К структурам можно «привязывать» функции, которые называются методами. Это основной механизм инкапсуляции поведения в Go.
func (u *User) Deactivate() { u.IsActive = false }
-
Теги полей (Field Tags): Это строковые литералы, которые можно добавлять к полям структуры для предоставления метаинформации. Они широко используются в пакетах для сериализации (JSON, XML), работы с базами данных (ORM) и валидации.
type User struct { ID int64 `json:"id"` Name string `json:"name" db:"user_name"` }
-
Встраивание (Embedding): Go не имеет наследования, но поддерживает композицию через встраивание. Одна структура может быть встроена в другую, и её поля и методы «поднимаются» на верхний уровень, становясь доступными напрямую.
type Timestamps struct { CreatedAt time.Time UpdatedAt time.Time } type Post struct { Title string Body string Timestamps // Встроенная структура } // p := Post{} // p.CreatedAt = time.Now() // Доступ к полю встроенной структуры