猿问

为什么在 go 工作中不检查 nil?

在第一个代码示例中,我收到“if pr != nil”行的错误:


for sup, _ := range supervisorToColor {

        pr := emailToPerson[sup]

        // The line below causes the compilation error:

        // ./myprog.go:1046: missing condition in if statement

        // ./myprog.go:1046: pr != nil evaluated but not used

        if pr != nil 

        {   

          local := peopleOnFloor[pr.Email]

          sp := &Super{pr, local}

          names = append(names, sp) 

        }   

}   

如果我注释掉 nil check if 语句,它编译得很好:


for sup, _ := range supervisorToColor {

        pr := emailToPerson[sup]

        // if pr != nil 

        // {

          local := peopleOnFloor[pr.Email]

          sp := &Super{pr, local}

          names = append(names, sp) 

        // }

}   

起初我倾向于认为这是代码早期的一些语法错误,但是当我注释掉这些行时它起作用的事实让我认为它是别的东西。


emailToPerson 是 map[string]*Person 类型,其中 Person 是一个结构体


提前致谢。如果事实证明这是非常简单的事情,我们深表歉意。


UYOU
浏览 142回答 1
1回答

慕桂英3389331

左花括号需要与 位于同一行if:if pr != nil { 从关于分号的Go 规范:正式语法使用分号“;” 作为许多作品的终结者。Go 程序可以使用以下两条规则省略大部分分号:当输入被分解为标记时,如果该标记是标识符整数、浮点数、虚数、符文或字符串文字关键字之一break, continue, fallthrough, 或return运算符和分隔符之一++, --, ), ], 或}为了让复杂的语句占据一行,可以在结束的“ )”或“ }”之前省略分号。这意味着您的代码等效于:if pr != nil;{    // ...}
随时随地看视频慕课网APP

相关分类

Go
我要回答