РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
474 of 1593 menu

Конструкция type switch

Конструкция type switch в Go используется для проверки типа значения, хранящегося в интерфейсе. Она похожа на обычный switch, но в качестве выражения используется утверждение типа. В каждом случае (case) указывается конкретный тип, и выполняется соответствующий блок кода, если значение интерфейса имеет этот тип. Переменная, которая хранит значение интерфейса, может быть повторно использована внутри каждого блока case с уже конкретным типом.

Синтаксис

switch v := x.(type) { case int: // v имеет тип int case string: // v имеет тип string default: // v имеет тип интерфейса }

В данном примере x — это переменная интерфейсного типа. Выражение x.(type) используется внутри switch для проверки типа. Переменная v принимает значение x, но с конкретным типом, указанным в каждом case.

Пример

Давайте проверим тип значения, хранящегося в интерфейсе, и выведем соответствующее сообщение:

package main import "fmt" func main() { var x interface{} = 42 switch v := x.(type) { case int: fmt.Printf("x is int: %d", v) case string: fmt.Printf("x is string: %s", v) default: fmt.Println("x is unknown type") } }

Результат выполнения кода:

"x is int: 42"

Пример

Теперь проверим интерфейс, содержащий значение типа string:

package main import "fmt" func main() { var x interface{} = "hello" switch v := x.(type) { case int: fmt.Printf("x is int: %d", v) case string: fmt.Printf("x is string: %s", v) default: fmt.Println("x is unknown type") } }

Результат выполнения кода:

"x is string: hello"

Пример

Рассмотрим пример с несколькими типами, включая пользовательский тип и интерфейс:

package main import "fmt" type MyInt int func main() { var x interface{} = MyInt(100) switch v := x.(type) { case int: fmt.Println("x is int") case MyInt: fmt.Println("x is MyInt") case interface{}: fmt.Println("x is some interface") default: fmt.Println("x is unknown type") } }

Результат выполнения кода:

"x is MyInt"

Смотрите также

  • конструкцию type assertion,
    которая проверяет, реализует ли интерфейс конкретный тип
  • понятие пустого интерфейса,
    который может хранить значение любого типа
  • конструкцию comma-ok,
    которая безопасно проверяет тип интерфейса
  • интерфейс fmt.Stringer,
    который используется для строкового представления типов
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить