Effictive Go Semicolons 分号

5,271 阅读1分钟

类似于C语言,Go的常规语法使用分号来表示结束状态,和C不同的是,这些分号不必出现在源码中。取而代之的是,自发分析器会使用一条简单的规则自动插入分号,因此在源码中基本就不用分号了。

规则是这样,如果在新行前的最后一个标记符(包含intfloat64这类)、数值或字符串常量之类和基本标记。如下:

break continue fallthrough return ++ -- ) }

词法分析器始终会在标记后面插入分号。“如果新行前的标记为语句的末尾,则插入分号”

分号也可以在左右大括号省略。如下:

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

通常GO程序只需要在for循环这样的狄梵使用分号。将初始化器、条件及增量元素分开。如果你在一行中写多个语句,也需要分号隔开。

func bubbleSort(a []int) {
   if len(a) <= 1 {
      return
   }

   for i := 0; i < len(a); i++ {
      flag := false
      for j := 0; j < len(a)-i-1; j++ {
         if a[j] > a[j+1] {
            temp := a[j]
            a[j] = a[j+1]
            a[j+1] = temp
            flag = true
         }
      }

      if !flag {
         return
      }
   }
}

你不应该将控制结构如:ifforswitchselect,的左大括号放在下一行,这阳做会就会在大括号前插入一个分号,这可能会引起不需要的效果。

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