回答

收藏

这是在 golang 中铸造吗?

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

paxPayment,ok = dataObject.(*entities.PassengerPayment)括号是干什么用的?我不确定这个分配操作发生了什么。
  V5 C* V# ?! J6 V你需要更多的细节来回答这个问题吗?) e% V; Q) h4 w3 E5 ?' @9 M( s
                                                               
( ]8 J+ W4 c8 y% e: v+ M7 |    解决方案:                                                               
! m  C" n8 _5 O0 o, c4 r2 G6 W* ~                                                                这是类型断言。类型断言可用于:
* b5 Y: X* B7 O" _6 T从接口获得类型值具体类型的值
+ O1 v0 o' p! b4 C; S' D或获取与初始接口类型不同的接口类型的值(不同方法集的接口实际上不是原始接口的子集,因为简单的类型转换可以简单地获得)。
引用规范:
8 ]5 S# {" k! U4 Y& p% g对于x接口类型和类型T主要表达式& k; G' Y/ C  R7 @( d8 ^% [
golangx.(T)7 t. H% h! S7 w6 h1 w) k2 q" j: c
断言x不是,nil并存储在中间的值x是类型T。这种表示法x.(T)称为类型断言。% ^& t/ `' \/ Y# m- D1 e
如果T不是接口类型,x.(T)断言,动态型x类型相同T。在这种情况下,T(接口)类型必须实现x;否则类型断言无效,因为不可能x存储 type 的值T。如果T是接口类型,x.(T)则断言x实现接口的动态类型T。
- f6 Z+ e* k: L+ H" j9 c; Z更具体地说,你的例子是它的一种特殊形式,它还报告了类型断言是否成立。如果没有,ok将是false,假如断言成立,ok将是true。
: N/ D9 M" }4 @# @  W7 f5 S与以下形式不同,这种特殊形式永远不会恐慌:% c- R- e* n/ y6 I6 k: k/ ]$ J
    paxPayment = dataObject.(*entities.PassengerPayment)
    % U: [# W, q& _* T
如果dataObject类型值不持有,*entities.PassengerPayment将会恐慌。
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则