Проверяет понимание создания пользовательских типов на основе структур в Go и их методов.
В Go структуры (struct) — это составные типы данных, которые группируют поля. Чтобы создать собственный тип на основе структуры, используется ключевое слово type. Это позволяет определить именованный тип, который можно использовать в сигнатурах функций, переменных и методах.
Пример объявления:
type Person struct {
Name string
Age int
}После объявления тип Person можно использовать как обычный тип. Важно, что Go — язык со строгой типизацией, поэтому даже если две структуры имеют одинаковые поля, они считаются разными типами, если объявлены отдельно.
Методы в Go определяются с помощью receiver — параметра, который указывает тип, к которому привязан метод. Receiver может быть значением или указателем. Методы с receiver-значением работают с копией, а с receiver-указателем — с оригиналом.
func (p Person) Greet() string {
return "Hello, " + p.Name
}
func (p *Person) Birthday() {
p.Age++
}В первом методе Greet receiver — значение, поэтому изменения не сохраняются. Во втором — указатель, поэтому изменение возраста влияет на исходную переменную.
Пользовательские типы на основе структур широко используются для моделирования сущностей предметной области: пользователей, заказов, товаров. Они позволяют группировать связанные данные и методы, что улучшает читаемость и поддерживаемость кода.
Пример использования:
p := Person{Name: "Alice", Age: 30}
fmt.Println(p.Greet()) // Hello, Alice
p.Birthday()
fmt.Println(p.Age) // 31Также можно создавать типы на основе других типов, например, type MyInt int, но структуры — самый распространённый случай.
Создание собственных типов на основе структур — фундаментальный приём в Go. Он помогает структурировать код, добавлять поведение к данным и обеспечивать типобезопасность. Используйте его для моделирования сущностей и инкапсуляции логики, связанной с ними.