回答

收藏

如何检查空结构?

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

我定义了一个结构…5 D8 N6 J- w: @$ m. A0 V+ h( M
    type Session struct    playerId string    beehive string    timestamp time.Time}
    - y0 @" B, g" B* E5 O0 G
有时候我给它分配一个空会话(因为 nil  不可能); ~* L0 R+ \% H
    session = Session{};) H- [" }! f5 Y' g
然后我想检查它是否空:$ j1 p" b* D) @/ \6 B0 H. {8 E
    if session == Session{{}{      // do stuff...}, |+ e7 r  f! m9 o" P( k
显然,这是不可行的。我该怎么写?
5 W- z0 p2 Z% u3 ^. g. v9 d5 m                                                                ' O8 Q* W/ p5 n  _
    解决方案:                                                                : ]7 ?! O2 B% M# L$ [6 D
                                                                可以用 == 与零值复合文本进行比较,因为所有字段都可以比较:6 C6 y! y, j5 R1 i2 R) A2 X4 m, r; h
    if (Session{}) == session {     fmt.Println("is zero value")}5 U7 K6 q0 b$ ]
由于解析歧义,if 条件下的复合文本需要括号。/ B5 [8 K; i/ e" n, ?
上述用法==适用于所有字段都具有可比性的结构。如果结构包含不可比拟的字段(切片、映射或函数),则必须将这些字段逐一比较。! s# |9 v0 c) f" [8 \. W
比较整个值的另一种方法是在有效会话中设置非零值字段。例如,如果玩家 ID 在有效会话中必须是 != “”,请使用
3 U3 X: q8 A! b
    if session.playerId == ""    fmt.Println("is zero value")}
    ) H. e1 Z3 m% V3 b$ `8 V
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则