回答

收藏

如何检查空结构?

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

我定义了一个结构…- B. [: r  Z3 C) r2 u: v
    type Session struct    playerId string    beehive string    timestamp time.Time}
    0 L2 q% N4 X& M) p# v
有时候我给它分配一个空会话(因为 nil  不可能)" e9 ~# f! ]. I# U- K
    session = Session{};
    , f4 P2 C' e3 P. H; ?# K* j9 c* i/ g
然后我想检查它是否空:5 Z& l7 Z1 h2 L
    if session == Session{{}{      // do stuff...}
    " N+ A2 B" A8 [0 t( u; n$ l1 a9 P: {
显然,这是不可行的。我该怎么写?2 M% e1 u5 m1 r+ n
                                                               
' i2 k  D5 W4 |# c& r* h5 _8 F    解决方案:                                                               
9 ^; ]/ R/ S; Q( f! h5 h                                                                可以用 == 与零值复合文本进行比较,因为所有字段都可以比较:
/ v) k+ }$ R1 F# [6 g( h% j1 i
    if (Session{}) == session {     fmt.Println("is zero value")}+ K1 ?. r- X$ w. T6 u/ u
由于解析歧义,if 条件下的复合文本需要括号。
; E8 ]! }1 c7 |上述用法==适用于所有字段都具有可比性的结构。如果结构包含不可比拟的字段(切片、映射或函数),则必须将这些字段逐一比较。1 C6 }( g" s$ @! B5 F7 @6 g
比较整个值的另一种方法是在有效会话中设置非零值字段。例如,如果玩家 ID 在有效会话中必须是 != “”,请使用
/ [& s6 _! M" A
    if session.playerId == ""    fmt.Println("is zero value")}1 O$ F) ^5 k' ?+ n; E
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则