пятница, 8 мая 2020 г.

Утверждение типа и переключатели типов в Golang

Утверждение типа (type assertion) обеспечивает доступ к конкретному значению интерфейса.

Утверждение типа на самом деле не преобразует интерфейс в другой тип данных, но обеспечивает доступ к конкретному значению интерфейса, которое обычно является тем, что вам нужно.

Утверждение типа x.(T) утверждает, что конкретное значение, хранящееся в x, имеет тип T, и что x не равно nil.

  • Если T не является интерфейсом, он утверждает, что динамический тип x идентичен T.
  • Если T является интерфейсом, он утверждает, что динамический тип x реализует T.

var x interface{} = "foo"

var s string = x.(string)
fmt.Println(s)     // "foo"

s, ok := x.(string)
fmt.Println(s, ok) // "foo true"

n, ok := x.(int)
fmt.Println(n, ok) // "0 false"

n = x.(int)        // ILLEGAL

panic: interface conversion: interface {} is string, not int

Переключатели типов

Переключатель типов (type switch) выполняет несколько утверждений типа последовательно и запускает первый случай с подходящим типом.

switch v := x.(type) {
case nil:
    fmt.Println("x is nil")            
case int: 
    fmt.Println("x is", v)             
case bool, string:
    fmt.Println("x is bool or string")
default:
    fmt.Println("type unknown")
}

Вывод:

x is bool or string


Читайте также:


Комментариев нет:

Отправить комментарий