类型断言
类型断言做两件事:第一件事是检查接口类型变量是否是特定的类型,这样使用时,类型断言返回两个值:基础值和bool
值。虽然基础值是您可能想要使用的值,但是布尔值告诉您类型断言是否成功!
类型断言所做的第二件事是允许您使用存储在接口中的具体值或将其分配给新变量。这意味着如果接口中有一个int
变量,可以使用类型断言获取该值。
首先,声明myInt
变量,该变量具有动态类型int
和值。然后使用类型断言测试两次myInt
变量的接口类型 — 分别是int
类型和float64
类型。
由于myInt
变量不包含float64
值,因此类型断言myInt.(float64)
执行时,如果没有恰当的处理,则会引发错误。因此在这种情况下,使用ok
变量来判断类型断言是否成功,将使程序免于panic
异常。
这里有两种类型的断言。第一个类型断言是成功的,因此不会有任何问题。但是,让我们进一步回顾一下这个特定类型的断言。变量i
的类型为int
,其值为123
,存储在中。因此由于int
满足myInt
接口,并且myInt
接口不需要实现接口函数,所以myInt.(int)
的值是一个int
值。
然而第二个类型断言myInt.(bool)
将触发panic
异常,因为myInt
的基础值不是布尔值(bool
)。因此执行assertion.go
将生成以下输出:
一般来说,在使用接口时,也应该使用类型断言。您马上会在程序中看到更多类型断言的使用案例。