paxPayment, ok = dataObject.(*entities.PassengerPayment)
括号是干什么用的?我不确定这个分配操作中发生了什么。
你需要更多细节来回答这个问题吗?
这是一个类型断言。类型断言可用于:
引用规范:
对于x接口类型和类型T的表达式,主要表达式 golang x.(T) 断言x不是,nil并且存储在中的值x是类型T。这种表示法x.(T)称为类型断言。 更精确地,如果T不是一个接口类型,x.(T)断言,动态型的x是相同的类型T。在这种情况下,T必须实现(接口)类型x;否则类型断言无效,因为不可能x存储 type 的值T。如果T是接口类型,x.(T)则断言x实现接口的动态类型T。
对于x接口类型和类型T的表达式,主要表达式
x
T
golang x.(T)
断言x不是,nil并且存储在中的值x是类型T。这种表示法x.(T)称为类型断言。
nil
x.(T)
更精确地,如果T不是一个接口类型,x.(T)断言,动态型的x是相同的类型T。在这种情况下,T必须实现(接口)类型x;否则类型断言无效,因为不可能x存储 type 的值T。如果T是接口类型,x.(T)则断言x实现接口的动态类型T。
更具体地说,您的示例是它的一种特殊形式,它还报告类型断言是否成立。如果不是,ok将是false,如果断言成立,ok将是true。
ok
false
true
与以下形式不同,这种特殊形式永远不会发生恐慌:
paxPayment = dataObject.(*entities.PassengerPayment)
如果dataObject不持有类型的值,*entities.PassengerPayment将会恐慌。
dataObject
*entities.PassengerPayment