переключатель типов (type switch)
Last updated
Was this helpful?
Last updated
Was this helpful?
Переключатель типов сравнивает типы, а не значения. В остальном он аналогичен переключателю выражений. Он помечается специальным выражением-переключателем, которое имеет форму утверждения типа, используя зарезервированное слово type, а не фактический тип:
Затем случаи (cases) сопоставляют фактические типы T с динамическим типом выражения x. Как и в утверждении типа, x должен иметь интерфейсный тип, и каждый неинтерфейсный тип T, указанный в случае (case), должен реализовывать тип x. Типы, перечисленные в случаях переключения типов, должны быть разными.
TypeSwitchGuard может включать краткое объявление переменной. Когда эта форма используется, переменная объявляется в конце TypeSwitchCase в каждого пункта. В пунктах со случаем точно одного типа переменная имеет этот тип; в противном случае переменная имеет тип выражения в TypeSwitchGuard.
Вместо типа случай (case) может использовать предварительно объявленный идентификатор nil; этот случай выбирается, когда выражение в TypeSwitchGuard имеет нулевое значение интерфейса. Может быть не более одного нулевого случая.
Дано выражение x типа interface{}, следующий переключатель типов:
может быть записан как:
Защите переключения типа может предшествовать простое утверждение, которое выполняется до оценки защиты.
"fallthrough" утверждение запрещено в переключателе типов.