Назад к вопросам
Middle
137
questionbank
Как в языке Go реализованы концепции объектно-ориентированного программирования (ООП)?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
В Go нет классических для других языков (Java, C++) концепций классов, наследования и виртуальных методов. ООП реализовано через:
- Структуры (Structs): Объединяют данные (поля).
type Person struct { Name string Age int } - Методы: Функции с ассоциированным получателем (структурой или другим типом). Позволяют структурам иметь поведение.
func (p Person) Greet() string { return "Hello, my name is " + p.Name }- Получатель по значению: Метод работает с копией структуры. Изменения внутри метода не затрагивают оригинальную структуру.
- Получатель по указателю: Метод работает с оригинальной структурой через указатель. Изменения внутри метода затрагивают оригинальную структуру.
- Интерфейсы (Interfaces): Определяют набор сигнатур методов, которым должен соответствовать тип. Обеспечивают полиморфизм "по утиной типизации" (
duck typing). Тип неявно реализует интерфейс, если реализует все его методы.type Greeter interface { Greet() string } func SayHello(g Greeter) string { return g.Greet() } - Встраивание (Embedding): Позволяет одной структуре "встраивать" другую структуру или интерфейс. Это не наследование в классическом смысле, скорее композиция. Встраиваемая структура становится анонимным полем, к ее полям и методам можно обращаться напрямую через экземпляр встраивающей структуры.
type Employee struct { Person // встроена структура Person ID string } // Employee теперь имеет поля Name и Age, а также метод Greet() e := Employee{ Person: Person{Name: "Alice", Age: 30}, ID: "E123", } fmt.Println(e.Greet()) // вызов метода Greet() структуры Person через Employee
| Концепция ООП | Реализация в Go | Замечания |
|---|---|---|
| Классы | Структуры | Нет явного ключевого слова class |
| Инкапсуляция | Экспортируемые (с заглавной буквы) / Неэкспортируемые (с маленькой буквы) поля/методы | Управление видимостью на уровне пакета |
| Наследование | Встраивание (Embedding) | Композиция вместо иерархического наследования |
| Полиморфизм | Интерфейсы | Duck typing, неявная реализация интерфейсов |