【问题标题】:Is this casting in golang?这是在golang中的铸造吗?
【发布时间】:2015-10-01 11:36:08
【问题描述】:

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

括号是干什么用的?我不确定这个赋值操作发生了什么。

您需要更多详细信息来回答这个问题吗?

【问题讨论】:

    标签: go types type-conversion


    【解决方案1】:

    这是一个Type assertion。类型断言可用于:

    • 接口类型的值中获取具体类型的值
    • 或获取与初始接口类型不同的值(具有不同method set 的接口,实际上不是原始接口的子集,因为可以使用简单的输入conversion)。

    引用规范:

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

    x.(T)
    

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

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

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

    这种特殊的形式从不恐慌,不像:

    paxPayment = dataObject.(*entities.PassengerPayment)
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多