paxPayment, ok = dataObject.(*entities.PassengerPayment)
用于括号的是什么?我不确定此分配操作中发生了什么。
您是否需要更多详细信息才能回答这个问题?
答案 0 :(得分:30)
这只是一个Type assertion。类型断言可用于:
引自规范:
对于接口类型的表达式
x
和类型T
,主表达式x.(T)
断言
x
不是nil
,而x
中存储的值的类型为T
。符号x.(T)
称为类型断言。更准确地说,如果
T
不是接口类型,则x.(T)
断言x
的动态类型为T
类型identical。在这种情况下,T
必须implementx
的(接口)类型;否则类型断言无效,因为x
无法存储类型T
的值。如果T
是接口类型,则x.(T)
断言动态类型x
实现接口T
。
更具体地说,您的示例是一种特殊形式,它还会报告类型断言是否成立。如果不是,则ok
将为false
,如果断言成立,则ok
将为true
。
这种特殊形式从不会像以下形式一样恐慌:
paxPayment = dataObject.(*entities.PassengerPayment)
如果dataObject
未包含*entities.PassengerPayment
类型的值,则会出现紧急情况。