type assertion и type switch в Go — это механизмы работы со значениями интерфейса, когда фактический (динамический) тип необходимо указать во время выполнения.
Что такое type assertion:
type assertion имеет вид:
Разбор
-
x — значение типа интерфейса.
-
T — тип, к которому мы пытаемся привести.
-
ok == true означает, что динамический тип совместим с T.
Преимущество type assertion:
-
Предоставляет доступ к определенному поведению определенного типа.
-
Обеспечивает безопасную работу с any/интерфейсами в адаптерах, декодерах, промежуточном ПО.
-
Полезно, когда ожидается один конкретный тип.
Как избежать паники:
Опасная форма:
Безопасная форма:
Именно двузначная форма с ok является производственным стандартом.
Что такое type switch:
type switch — удобный способ обработки сразу нескольких возможных типов:
Преимущество type switch:
-
Делает ветвление типов читабельным.
-
Уменьшает каскад нескольких утверждений.
-
Предоставляет явный путь default для неизвестных типов.
Когда что использовать:
-
type assertion — при проверке одного ожидаемого типа.
-
type switch — когда мы разрешаем несколько типов и нужна разная логика для
each.
Заключение:
type assertion и type switch — это контролируемый способ «раскрыть» тип значения динамического интерфейса. Во избежание сбоев утверждение должно быть выполнено в безопасной форме v, ok := ... и всегда иметь сценарий обработки ok == false.
Итог
type assertion и type switch в Go — это механизмы работы со значениями интерфейса, когда фактический (динамический) тип необходимо указать во время выполнения.