回答

收藏

这是在 golang 中铸造吗?

技术问答 技术问答 245 人阅读 | 0 人回复 | 2023-09-12

paxPayment,ok = dataObject.(*entities.PassengerPayment)括号是干什么用的?我不确定这个分配操作发生了什么。7 z# u' }3 X* C$ q, t) T
你需要更多的细节来回答这个问题吗?
/ f6 E; F0 e8 M/ F! R, h                                                                ) u5 p. B' E( I" z' y8 X
    解决方案:                                                               
$ B) s' d' w* f4 k: V& f                                                                这是类型断言。类型断言可用于:
" E% u5 l! _+ j& T  C' N从接口获得类型值具体类型的值, F9 i9 ~5 K$ J) P1 z4 Z
或获取与初始接口类型不同的接口类型的值(不同方法集的接口实际上不是原始接口的子集,因为简单的类型转换可以简单地获得)。
引用规范:
: m( Y- i8 \; o对于x接口类型和类型T主要表达式
8 C% w8 D: x% [6 V4 ^. `- @golangx.(T)" o; S$ Q' q9 Y8 z# r
断言x不是,nil并存储在中间的值x是类型T。这种表示法x.(T)称为类型断言。: j0 m& }; I9 j: m
如果T不是接口类型,x.(T)断言,动态型x类型相同T。在这种情况下,T(接口)类型必须实现x;否则类型断言无效,因为不可能x存储 type 的值T。如果T是接口类型,x.(T)则断言x实现接口的动态类型T。+ o. p/ C6 ]! ^" N
更具体地说,你的例子是它的一种特殊形式,它还报告了类型断言是否成立。如果没有,ok将是false,假如断言成立,ok将是true。" v2 Q+ G% @" q2 ~. B
与以下形式不同,这种特殊形式永远不会恐慌:; Y5 X% I& O: D
    paxPayment = dataObject.(*entities.PassengerPayment)
    / Y$ l; W2 x) G
如果dataObject类型值不持有,*entities.PassengerPayment将会恐慌。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则