Полиморфизм в Go?

Middle
881 просмотров
AFK Offer AI

В Go полиморфизм реализуется через интерфейсы. Нет классов и наследования — вместо этого неявная реализация интерфейсов и композиция.

type Shape interface {
    Area() float64
}

type Circle struct{ Radius float64 } func (c Circle) Area() float64 { return math.Pi * c.Radius * c.Radius }

type Rect struct{ W, H float64 } func (r Rect) Area() float64 { return r.W * r.H }

func PrintArea(s Shape) { fmt.Println(s.Area()) // вызывается метод конкретного типа }

Также есть параметрический полиморфизм через дженерики (Go 1.18+): func Max[T constraints.Ordered](a, b T) T. Но интерфейсный полиморфизм остаётся основным инструментом.

Следующий вопрос

Как работает cross-compilation в Go?