Утверждение типа (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
Читайте также:
Комментариев нет:
Отправить комментарий