回答

收藏

如何检查空结构?

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

我定义了一个结构…
8 m) M& u6 y$ ~' T
    type Session struct    playerId string    beehive string    timestamp time.Time}
    % C$ }0 ~8 b. Z5 x  K4 s- b7 k
有时候我给它分配一个空会话(因为 nil  不可能)
2 t1 S& ^, g/ l4 V4 ~
    session = Session{};
    " ]" Q1 \- |1 @; _# L
然后我想检查它是否空:- E( _- G* T8 ^# P
    if session == Session{{}{      // do stuff...}
    1 q4 B# q& Y* O: E/ }) q) K0 {
显然,这是不可行的。我该怎么写?, H8 k, D- g* K6 D. n
                                                                5 s' F6 ]" e- D& @% J  k
    解决方案:                                                               
. L0 r3 D5 x$ ^# p% }; S                                                                可以用 == 与零值复合文本进行比较,因为所有字段都可以比较:
6 [! [; f* k2 ?9 \
    if (Session{}) == session {     fmt.Println("is zero value")}
    # o5 W6 k" E- W" q7 F$ Q% p, m
由于解析歧义,if 条件下的复合文本需要括号。
0 ~; ?  x3 b7 ^( d4 y! {) A2 r% r上述用法==适用于所有字段都具有可比性的结构。如果结构包含不可比拟的字段(切片、映射或函数),则必须将这些字段逐一比较。
. F; V0 e% }; M# q2 W. l4 v+ h比较整个值的另一种方法是在有效会话中设置非零值字段。例如,如果玩家 ID 在有效会话中必须是 != “”,请使用
' K/ w! M. M" `  b! F7 l
    if session.playerId == ""    fmt.Println("is zero value")}% D5 j7 c2 a4 ^8 \% U! k. T8 V
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则