加载中...

分号


类似于C,Go的规范语法是使用分号来终结语句的。但是于C不同的是,这些分号并不在源码中出现。词法分析器会在扫描时,使用简单的规则自动插入分号,因此输入文本中大部分是没有分号的。

规则是这样的,如果在换行之前的最后一个符号为一个标识符(包括像intfloat64这样的单词),一个基本的文字,例如数字或者字符串常量,或者如下的一个符号

break continue fallthrough return ++ -- ) }

则词法分析器总是会在符号之后插入一个分号。这可以总结为“如果换行出现在可以结束一条语句的符号之后,则插入一个分号”。

紧挨着右大括号之前的分号也可以省略掉,这样,语句

    go func() { for { dst <- <-src } }()

就不需要分号。地道的Go程序只在for循环子句中使用分号,来分开初始化,条件和继续执行,这些元素。分号也用于在一行中分开多条语句,这也是你编写代码应该采用的方式。

分号插入规则所导致的一个结果是,你不能将控制结构(ifforswitchselect)的左大括号放在下一行。如果这样做,则会在大括号之前插入一个分号,这将会带来不是想要的效果。应该这样编写

if i < f() {
    g()
}

而不是这样

if i < f()  // wrong!
{           // wrong!
    g()
}

还没有评论.