Ответ
В Go нет классов в классическом понимании, но многие концепции объектно-ориентированного программирования (ООП) реализуются с помощью структур, методов и интерфейсов.
Структуры (struct
) играют центральную роль в реализации следующих концепций:
-
Инкапсуляция: Структура объединяет данные (поля) и поведение (методы) в единый тип. Управление видимостью (public/private) достигается через капитализацию имен: имена, начинающиеся с заглавной буквы, экспортируются (public), а с маленькой — нет (private для пакета).
-
Композиция: Go поощряет композицию вместо наследования. Структура может включать в себя другие структуры в качестве полей, создавая сложные объекты из более простых частей.
-
«Наследование» через встраивание (Embedding): Go позволяет встраивать одну структуру в другую. Это не является наследованием, а формой композиции, но обеспечивает похожий синтаксис. Поля и методы встроенной структуры «поднимаются» на уровень внешней, что позволяет обращаться к ним напрямую.
type Person struct { // Базовый тип Name string } func (p *Person) Greet() { fmt.Printf("Hello, my name is %sn", p.Name) } type Employee struct { Person // Встраивание Person Company string } func main() { emp := Employee{ Person: Person{Name: "Alice"}, Company: "TechCorp", } // Можно напрямую вызывать поля и методы встроенной структуры fmt.Println(emp.Name) // Вывод: Alice emp.Greet() // Вывод: Hello, my name is Alice }
-
Полиморфизм: Хотя полиморфизм в Go достигается через интерфейсы, именно структуры (с их методами) реализуют эти интерфейсы, что позволяет использовать объекты разных типов взаимозаменяемо.