類似于C,Go的規范語法是使用分號來終結語句的。但是于C不同的是,這些分號并不在源碼中出現。詞法分析器會在掃描時,使用簡單的規則自動插入分號,因此輸入文本中大部分是沒有分號的。
規則是這樣的,如果在換行之前的最后一個符號為一個標識符(包括像`int`和`float64`這樣的單詞),一個基本的文字,例如數字或者字符串常量,或者如下的一個符號
~~~
break continue fallthrough return ++ -- ) }
~~~
則詞法分析器總是會在符號之后插入一個分號。這可以總結為“如果換行出現在可以結束一條語句的符號之后,則插入一個分號”。
緊挨著右大括號之前的分號也可以省略掉,這樣,語句
~~~
go func() { for { dst <- <-src } }()
~~~
就不需要分號。地道的Go程序只在`for`循環子句中使用分號,來分開初始化,條件和繼續執行,這些元素。分號也用于在一行中分開多條語句,這也是你編寫代碼應該采用的方式。
分號插入規則所導致的一個結果是,你不能將控制結構(`if`,`for`,`switch`或`select`)的左大括號放在下一行。如果這樣做,則會在大括號之前插入一個分號,這將會帶來不是想要的效果。應該這樣編寫
~~~
if i < f() {
g()
}
~~~
而不是這樣
~~~
if i < f() // wrong!
{ // wrong!
g()
}
~~~