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

Основы Go: утверждение типа

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

t := i.(T)

Эта инструкция утверждает, что интерфейсное значение i содержит конкретное значение типа T, и присваивает нижележащее значение T переменной t.

Если i не содержит T, то это приведет к panic.

Чтобы проверить, содержит ли интерфейсное значение конкретный тип, оператор приведения типа может вернуть два значения: нижележащее значение и булевое значение, указывающее, была ли операция приведения типа успешной.

t, ok := i.(T)

Если i содержит T, то t будет нижележащим значением и ok будет true.

Если нет, то ok будет false и t будет нулевым значением типа T, и не будет panic.

Обратите внимание на сходство между этим синтаксисом и чтением из карты.

package main

import "fmt"

func main() {
  var i interface{} = "hello"

  s := i.(string)
  fmt.Println(s)

  s, ok := i.(string)
  fmt.Println(s, ok)

  f, ok := i.(float64)
  fmt.Println(f, ok)

  f = i.(float64) // panic
  fmt.Println(f)
}

Вывод:

hello
hello true
0 false
panic: interface conversion: 
interface {} is string, not float64

goroutine 1 [running]:
main.main()
  /tmp/sandbox011794330/main.go:17 +0x220


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


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

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