Var*_*tro 32 types type-conversion go
paxPayment, ok = dataObject.(*entities.PassengerPayment)
括号用于什么?我不确定这个赋值操作中发生了什么.
您还需要更多细节才能回答这个问题吗?
icz*_*cza 46
它只是一个Type断言.类型断言可用于:
引用规范:
对于
x
接口类型和类型T
的表达式,主表达式Run Code Online (Sandbox Code Playgroud)x.(T)
断言
x
不是,nil
并且存储的值x
是类型T
.该表示法x.(T)
称为类型断言.更精确地,如果
T
不是一个接口类型,x.(T)
断言,动态型的x
是相同的类型T
.在这种情况下,T
必须实现(接口)类型x
; 否则类型断言无效,因为无法x
存储类型的值T
.如果T
是接口类型,x.(T)
则断言x
实现接口的动态类型T
.
更具体地说,您的示例是它的一种特殊形式,它还报告类型断言是否成立.如果没有,ok
将会false
,如果断言成立,ok
将是true
.
这种特殊形式从不会像以下形式那样恐慌:
paxPayment = dataObject.(*entities.PassengerPayment)
Run Code Online (Sandbox Code Playgroud)
如果dataObject
不保持类型的值*entities.PassengerPayment
将会恐慌.