Is this casting in golang?

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

What are the brackets used for? I'm not sure what is going on in this assignment operation.

Do you need any more details to answer this question?

87672 次浏览

它是 类型断言。类型断言可用于:

  • 接口类型的值中获取 混凝土类型的值
  • 或者获得一个 与众不同接口类型比初始接口类型的值(一个具有不同 方法集的接口,实际上不是原始接口的子集,因为这可以简单地使用简单的 转变类型获得)。

引用规格说明:

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

x.(T)

断言 x不是 nil,并且存储在 x中的值是 T类型。符号 x.(T)被称为 类型断言类型断言

更准确地说,如果 T不是接口类型,则 x.(T)断言 x的动态类型是 x.(T)2到 T类型。在这种情况下,T必须 x.(T)3 x的(接口)类型; 否则类型断言无效,因为 x不可能存储 T类型的值。如果 T是接口类型,则 x.(T)断言 x的动态类型实现接口 T

更具体地说,您的示例是它的一种特殊形式,它还报告类型断言是否成立。如果不是,ok将是 false,如果断言成立,ok将是 true

This special form never panics unlike the form of:

paxPayment = dataObject.(*entities.PassengerPayment)

如果 dataObject不包含类型为 *entities.PassengerPayment的值,则会引起恐慌。