вторник, 15 января 2019 г.

Основы Go: switch с типами

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!


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


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

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