Что такое утиная типизация

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

Ответ

Утиная типизация — это концепция, при которой тип объекта определяется не его явным объявлением, а набором методов и свойств, которые он реализует. Если объект "крякает как утка и ходит как утка", то он считается уткой, даже без явного наследования.

В Go утиная типизация реализуется через интерфейсы. Интерфейс неявно реализуется, если тип содержит все его методы.

type Duck interface {
    Quack()
    Walk()
}

type Bird struct{}

func (b Bird) Quack() { fmt.Println("Quack!") }
func (b Bird) Walk()  { fmt.Println("Walking like a duck") }

func MakeDuckSpeak(d Duck) {
    d.Quack()
}

func main() {
    bird := Bird{}
    MakeDuckSpeak(bird) // Bird автоматически удовлетворяет Duck
}

Преимущества: гибкость, полиморфизм без наследования. Недостаток: сложнее отслеживать, какие типы реализуют интерфейс.