Ответ
Утиная типизация — это концепция, при которой тип объекта определяется не его явным объявлением, а набором методов и свойств, которые он реализует. Если объект "крякает как утка и ходит как утка", то он считается уткой, даже без явного наследования.
В 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
}
Преимущества: гибкость, полиморфизм без наследования. Недостаток: сложнее отслеживать, какие типы реализуют интерфейс.
Видео-ответы
▶
▶