回答

收藏

Go 声明中的“_,”(下划线逗号)是什么?

技术问答 技术问答 213 人阅读 | 0 人回复 | 2023-09-12

我似乎无法理解这种变量声明:# ?+ u( P3 F& I6 j( H$ t
    _,prs := m["example"]$ n" S; i- K# `' x' D  `; s1 s
” _,“他们在做什么,为什么他们声明这样的变量而不是; H0 n6 L6 W# @" m2 q9 o
    prs := m["example"]
    4 p+ z: d1 n1 p) A4 k
               
, e- u) z1 y: v" D    解决方案:                                                                # _% R/ V+ C/ w4 J. q% o
                                                                它避免了必须声明返回值的所有变量。' R4 A8 ~' B2 `) g& ]7 w& q
它被称为空白标识符
8 F: P/ o# \1 X( V2 ~- t* e6 Z, V# E如:/ z$ O1 K* u8 g: t
    _,y,_ := coord(p)  // coord() returns three values; only interested in y coordinate
    , T$ g; `- Z) T0 U# ~! k* S; h
这样,你就不必声明你不会使用的变量:Go 不允许。相反,使用_忽略变量。9 d' D3 R8 S2 N
; ]4 c! H$ [& D1 q: O' I
因为它会丢弃返回值,所以当你只想检查返回值时,它是非常有帮助的
4 ]- c2 {1 R9 G4 F3 }
    _,present := timeZone[tz]
    ! J, L# b0 b/ P/ T6 B
在不担心实际值的情况下测试地图是否存在,可以使用空白标志符,简单的下划线 ( _)。7 H# b& U; z; h8 C) X6 u
可使用任何类型的任何值分配或声明空白标志符,并无害地丢弃该值。
/ [  u. c) }4 ~1 |要测试地图中的存在,请使用空白标识符代替常用变量。
: x/ s3 l" R4 H7 @; I9 S* H3 C就像在评论中:- \% g% |  i- Q, Y' A' l
普遍接受的标准是将成员资格试变量为ok(与检查通道读取是否有效相同)6 W  T& J2 [( J
这允许您将其与测试相结合:2 p6 S: d; }' a& V
    if _,err := os.Stat(path); os.IsNotExist(err)    fmt.Printf("%s does not exist\n",path)}4 V( C' P% ^+ E" Y! W: D. k
它也在循环中:. E5 C: E# D1 Y- ^. {
如果您只需要范围内的第二项(值),请使用空白标识符(下划线)丢弃第一项:* I% z" I( e, t
    sum := 0for _,value := range array    sum  = value}* W) q5 a( d# ^  k* _  p
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则