Ответ
В Go полиморфизм реализуется через интерфейсы - это основной механизм для достижения полиморфного поведения. Интерфейс определяет набор методов, и любой тип, реализующий эти методы, автоматически удовлетворяет интерфейсу. Это называется "утиной типизацией".
Пример:
type Shape interface {
Area() float64
}
type Circle struct { Radius float64 }
func (c Circle) Area() float64 {
return math.Pi * c.Radius * c.Radius
}
type Square struct { Side float64 }
func (s Square) Area() float64 {
return s.Side * s.Side
}
func PrintArea(s Shape) {
fmt.Println(s.Area()) // Полиморфный вызов
}
Ключевые особенности:
- Нет явного объявления реализации интерфейса
- Интерфейсы реализуются неявно
- Можно использовать пустой интерфейс
interface{}для работы с любыми типами - Встраивание структур позволяет достичь подобия наследования