回答

收藏

如何检查空结构?

技术问答 技术问答 323 人阅读 | 0 人回复 | 2023-09-11

我定义了一个结构…
. V- F, w3 z" e9 G
    type Session struct    playerId string    beehive string    timestamp time.Time}
    5 o" Q0 O- q# f& S
有时候我给它分配一个空会话(因为 nil  不可能)7 S7 r+ U9 _2 x2 _$ x
    session = Session{};; c4 }8 s8 L/ l, H% C
然后我想检查它是否空:
& M7 O% o) d1 m
    if session == Session{{}{      // do stuff...}
    ; Y, h2 I# ]/ ]) t* u$ Y
显然,这是不可行的。我该怎么写?
' h; p5 U4 C9 z, k" _8 R/ C                                                               
4 X) D+ u2 R( f/ `    解决方案:                                                                ' b1 O, N. S9 Q0 W# S7 C4 z$ P% R
                                                                可以用 == 与零值复合文本进行比较,因为所有字段都可以比较:
/ E% \8 n0 G# P- u
    if (Session{}) == session {     fmt.Println("is zero value")}
    8 z$ G% T9 A2 v
由于解析歧义,if 条件下的复合文本需要括号。9 b8 B4 }( a6 O* R5 }- u) l! |. q( D
上述用法==适用于所有字段都具有可比性的结构。如果结构包含不可比拟的字段(切片、映射或函数),则必须将这些字段逐一比较。! [+ T0 H' D7 [4 |& q
比较整个值的另一种方法是在有效会话中设置非零值字段。例如,如果玩家 ID 在有效会话中必须是 != “”,请使用
  Z" J1 Y" z# ~" t
    if session.playerId == ""    fmt.Println("is zero value")}' s0 `1 y! p+ N5 ?7 i" M
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则