Как реализован полиморфизм в Go

«Как реализован полиморфизм в Go» — вопрос из категории Golang, который задают на 28% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В 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{} для работы с любыми типами
  • Встраивание структур позволяет достичь подобия наследования