Switch с типами это конструкция, которая позволяет несколько операций приведения типа подряд.
Этот тип switch выглядит как и обычный оператор switch, но в качестве меток в блоках case выступают типы (не значения), и эти типы сравниваются с типом нижележащего значения интерфейсного значения.
switch v := i.(type) {
case T:
// здесь v имеет тип T
case S:
// здесь v имеет тип S
default:
// нет совпадения; здесь v имеет такой же тип, что и i
}
Объявление в таком варианте switch имеет такой же синтаксис, что и приведение типа i.(T), но конкретный тип T заменяется ключевым словом type.
Оператор switch проверяет, содержит ли интерфейсное значение i значение типа T или S. В обоих случаях: как T, так и S, переменная v будет либо типа T, либо соответственно S и будет содержать значение, которое было в i. В ветке default (где нет совпадения), переменная v такого же типа и значения, что и i.
package main
import "fmt"
func do(i interface{}) {
switch v := i.(type) {
case int:
fmt.Printf("Twice %v is %v\n", v, v*2)
case string:
fmt.Printf("%q is %v bytes long\n", v, len(v))
default:
fmt.Printf("I don't know about type %T!\n", v)
}
}
func main() {
do(21)
do("hello")
do(true)
}
Вывод:
Twice 21 is 42
"hello" is 5 bytes long
I don't know about type bool!
Читайте также:
Комментариев нет:
Отправить комментарий