Вопрос проверяет понимание различий между разными видами типизации
Go статически типизирован, но поддерживает “утиную типизацию” через интерфейсы: тип совместим с интерфейсом, если реализует его методы.
Статическая типизация — проверки типов происходят во время компиляции.
Утиная типизация в Go реализована через интерфейсы: если тип имеет все методы интерфейса, он автоматически считается реализующим его, без явного указания.
Пример:
type Reader interface { Read(p []byte) (n int, err error) }
type MyReader struct{}
func (MyReader) Read(p []byte) (int, error) { return 0, nil }
var r Reader = MyReader{}Гибкость (легче тестировать, подменять реализации).
Сильная типизация при этом сохраняется.
Вывод: Это даёт гибкость интерфейсов без потери строгой типизации.