Утиная типизация (duck typing) — это стиль динамической типизации, при котором тип объекта или переменной определяется не на основе его явного наследования или реализации интерфейса, а на основе наличия у него определенного набора методов или свойств. Если объект "ходит как утка и крякает как утка", то считается, что он ufkbyjdskjrfjvjqутка.
В Go утиная типизация реализована через неявные интерфейсы. Структура или любой другой тип данных не должен явно указывать, что он реализует определенный интерфейс. Достаточно, чтобы тип данных реализовал все методы, определенные в интерфейсе.
Пример:
go
В этом примере ни Dog, ни Cat явно не указывают, что они реализуют Speaker. Однако, поскольку они обе имеют метод Speak(), который соответствует сигнатуре метода в интерфейсе Speaker, они могут быть использованы там, где ожидается тип Speaker.
Преимущества утиной типизации в Go: