Утверждение типа в Go
Конкретный тип достают из интерфейса проверкой,
которая сообщает, удалась ли она. Запись
похожа на вызов с точкой и типом в скобках
после значения интерфейса. Вторая переменная
ok показывает, совпал ли тип с
ожидаемым.
Положим строку в any и безопасно
прочитаем ее:
package main
import "fmt"
func main() {
var v any = "hi"
s, ok := v.(string)
if ok {
fmt.Println(s)
} else {
fmt.Println("not a string")
}
}
ok равно истине, в s попала
строка "hi". Если бы внутри было
число, ok стало бы ложью, а s
получило бы нулевое значение строки. Если
оставить только одно имя слева без ok,
при неверном типе программа останавливается.
Утверждение работает и с другими именами
интерфейсов, не только с any. Главное,
чтобы слева было значение интерфейса, а
справа в скобках стоял конкретный тип.
Дано значение:
package main
import "fmt"
var v any = 15
Достаньте int через утверждение
с ok и выведите число, если
проверка удалась.
Дан следующий код:
package main
var v any = true
Попробуйте утверждение к string
с ok и выведите ok.
Скажите, что произойдет с программой,
если записать s := v.(string),
когда внутри v лежит число.