这是一个类型断言。类型断言可用于:
- 从 接口 类型的值中获取 具体 类型的值 __
- 或获得与初始接口类型 不同的 接口值(具有不同方法集的接口,实际上不是原始接口的子集,因为可以使用简单的类型转换就可以简单地获得它)。
引用规范:
对于
x接口类型和类型T的表达式,主要表达式x.(T)断言
x不是,nil并且存储的值x是typeT。该符号x.(T)称为 类型断言 。更精确地,如果
T不是一个接口类型,x.(T)断言,动态型的x是相同的类型T。在这种情况下,T必须实现的(接口)类型x;否则类型断言无效,因为无法x存储type的值T。如果T为接口类型,x.(T)则断言动态类型的x实现接口T。
更具体地说,您的示例是它的一种特殊形式,它还报告类型断言是否成立。如果不是,
ok将是
false,如果断言成立,
ok将是
true。
与以下形式不同,这种特殊形式永远不会惊慌:
paxPayment = dataObject.(*entities.PassengerPayment)
如果
dataObject不持有type值,
*entities.PassengerPayment则会感到恐慌。



