回答

收藏

如何检查空结构?

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

我定义了一个结构…
) b/ [4 N0 `/ I5 c3 w
    type Session struct    playerId string    beehive string    timestamp time.Time}
    ( d$ d, {% z8 H4 U0 {9 j/ C
有时候我给它分配一个空会话(因为 nil  不可能)( U- }% J( F1 L7 Q: S% X% G
    session = Session{};
    , G- e; U) w! o5 {; F
然后我想检查它是否空:" I; |, s9 v! k- x3 Y( F
    if session == Session{{}{      // do stuff...}
    6 G; H$ o( [/ C- s7 k0 m8 |
显然,这是不可行的。我该怎么写?
# e* p- E. |+ }                                                                9 Y( ?" |8 C5 u" M% Y( l
    解决方案:                                                               
$ e4 k) C. w( }5 X/ L                                                                可以用 == 与零值复合文本进行比较,因为所有字段都可以比较:) D. T- N/ s9 b, [8 d
    if (Session{}) == session {     fmt.Println("is zero value")}  i1 r/ N% s% r  B
由于解析歧义,if 条件下的复合文本需要括号。7 D7 ?& a2 S: |2 {: y8 o
上述用法==适用于所有字段都具有可比性的结构。如果结构包含不可比拟的字段(切片、映射或函数),则必须将这些字段逐一比较。
- x' ]. y% _5 }1 Y- B比较整个值的另一种方法是在有效会话中设置非零值字段。例如,如果玩家 ID 在有效会话中必须是 != “”,请使用
( M% l0 ~  N9 `, @& |* }
    if session.playerId == ""    fmt.Println("is zero value")}0 o) G7 X# C' N( N' h
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则