Ответ
Структура (struct
) в Go — это композитный тип данных, который объединяет в себе именованные поля с различными типами. Она используется для группировки связанных данных в единую сущность.
Объявляется с помощью ключевых слов type
и struct
:
type Employee struct {
ID int
FirstName string
LastName string
IsActive bool
}
Ключевые особенности структур в Go:
-
Передача по значению (Value Type):
- По умолчанию структуры передаются в функции по значению, то есть создаётся полная копия объекта. Изменения внутри функции не влияют на исходную структуру.
-
Передача по указателю:
- Чтобы избежать копирования и иметь возможность изменять исходный объект, структуры передают по указателю (
*Employee
). Это более эффективно для больших структур.
- Чтобы избежать копирования и иметь возможность изменять исходный объект, структуры передают по указателю (
-
Встраивание (Embedding):
- Go поддерживает встраивание одной структуры в другую (аналог композиции, часто сравнивают с наследованием). Поля и методы встроенной структуры "поднимаются" на уровень внешней.
type Person struct { Name string Age int }
type Employee struct { Person // Встроенная структура Salary int }
// Использование: // emp := Employee{} // emp.Name = "John" // Доступ к полю встроенной структуры
- Go поддерживает встраивание одной структуры в другую (аналог композиции, часто сравнивают с наследованием). Поля и методы встроенной структуры "поднимаются" на уровень внешней.
-
Методы:
- Для структур можно определять методы — функции с "получателем" (receiver), который связывает функцию с конкретным типом.
func (p *Person) Greet() string { return "Hello, my name is " + p.Name }
- Для структур можно определять методы — функции с "получателем" (receiver), который связывает функцию с конкретным типом.