在第一个代码示例中,我收到“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是struct的人
提前致谢。如果事实证明这非常简单,那就道歉了。
答案 0 :(得分:6)
开放花括号需要与if
:
if pr != nil {
正式语法使用分号“;”作为许多作品的终结者。 Go程序可以使用以下两个规则省略大多数这些分号:
当输入被分解为令牌时,如果该令牌是
,则在行的最终令牌之后立即自动将分号插入到令牌流中
- 标识符
- 整数,浮点,虚数,符文或字符串文字
- 其中一个关键字
break
,continue
,fallthrough
或return
- 其中一个运算符和分隔符
++
,--
,)
,]
或}
- 醇>
要允许复杂语句占用一行,在结束“
)
”或“}
”之前可以省略分号。
这意味着您的代码相当于:
if pr != nil;
{
// ...
}