这是在golang中的铸造吗?
Posted
技术标签:
【中文标题】这是在golang中的铸造吗?【英文标题】:Is this casting in golang? 【发布时间】:2015-10-01 11:36:08 【问题描述】:paxPayment, ok = dataObject.(*entities.PassengerPayment)
括号是干什么用的?我不确定这个赋值操作发生了什么。
您需要更多详细信息来回答这个问题吗?
【问题讨论】:
【参考方案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
类型的值,则会出现恐慌。
【讨论】:
以上是关于这是在golang中的铸造吗?的主要内容,如果未能解决你的问题,请参考以下文章
golang 中的 os.File.Write() 线程安全吗?