Утверждение типа (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
Читайте также:
- Основы Go: утверждение типа
- Основы Go: switch с типами
- Эффективный Go: преобразования интерфейсов и утверждения типа
Комментариев нет:
Отправить комментарий