回答

收藏

如何检查空结构?

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

我定义了一个结构…
. e7 a- z- r" B6 k, A
    type Session struct    playerId string    beehive string    timestamp time.Time}
    ! T6 \3 G7 y4 D4 y' u; H* P+ V1 k
有时候我给它分配一个空会话(因为 nil  不可能)) M- T. j" U/ _* M( |
    session = Session{};
    ) O7 k$ t9 y- O9 D  ~8 u& `
然后我想检查它是否空:
8 X# t' F/ \1 {0 w+ {  w
    if session == Session{{}{      // do stuff...}
    : y5 |  M) ^7 M2 d
显然,这是不可行的。我该怎么写?# l7 s2 U. L1 [" {
                                                                3 q, I1 m# O" ]1 i
    解决方案:                                                               
, D, H1 b0 V) }! X. a. a+ v3 Y                                                                可以用 == 与零值复合文本进行比较,因为所有字段都可以比较:; g9 a( x" }4 ~
    if (Session{}) == session {     fmt.Println("is zero value")}8 E2 L, w1 {/ z$ C
由于解析歧义,if 条件下的复合文本需要括号。
- T: k+ N# f/ d6 e8 p4 {上述用法==适用于所有字段都具有可比性的结构。如果结构包含不可比拟的字段(切片、映射或函数),则必须将这些字段逐一比较。
8 L) f% Y# Z$ |; P比较整个值的另一种方法是在有效会话中设置非零值字段。例如,如果玩家 ID 在有效会话中必须是 != “”,请使用7 }' B( h9 @& D; B  \" m+ E" ], m8 ]3 @
    if session.playerId == ""    fmt.Println("is zero value")}
    ) m3 e% {; N7 {4 {9 R* v2 |
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则