这是在golang的演员吗?

Var*_*tro 32 types type-conversion go

paxPayment, ok = dataObject.(*entities.PassengerPayment)

括号用于什么?我不确定这个赋值操作中发生了什么.

您还需要更多细节才能回答这个问题吗?

icz*_*cza 46

它只是一个Type断言.类型断言可用于:

  • 接口类型的值获取具体类型的值
  • 或者获得与初始接口类型不同的接口类型的值(具有不同方法集的接口,实际上不是原始接口类型的子集,因为可以简单地使用简单类型转换获得).

引用规范:

对于x接口类型和类型T的表达式,主表达式

x.(T)
Run Code Online (Sandbox Code Playgroud)

断言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将会恐慌.