Проверяет понимание, когда именно Go гарантирует соответствие типа интерфейсу и когда проверяет динамические приведения.
Статическая проверка соответствия интерфейсу методам типа происходит в compile-time при явной или неявной реализации. Однако runtime происходит проверка при использовании приведения через .(Type), где может быть panic или ошибка, если тип не тот.
Compile-time:
Go компилирует и убеждается, что тип имеет все методы интерфейса, когда вы пишете var x SomeInterface = y.
Runtime:
При динамическом приведении v, ok := iface.(ConcreteType) или v := iface.(ConcreteType) Go проверяет фактический тип и может вернуть ok=false или panic.
Type switch:
Тоже работает на runtime, проверяя iface.(type).
Вывод:
Статическая безопасность обеспечена на этапе компиляции, динамические операции проверяются во время выполнения.