Golang中的分行


Golang中的分行

Golang的代码风格

  在go语言中有一个非常神奇的语法检验规则,函数与大括号必须在同一行,if后紧跟的else必须在}的当行,否则不能通过编译。如下:

func main() 
{
	a := 1
	if a != 1 {
		
	}
	else {
		
	}
}

  报如下错误:

  • 缺少函数正文
  • '{'异常

  又比如在逗号问题上,有特殊的表达方式,若结尾括号与前文最后一元素不在同一行,需添加逗号表明(这一点在C/C++上是不允许的,否则会认为参数匹配异常,当然,如果你使用JavaScript,那就没事了)

func main() {
	hmp := map[byte]byte{
		')' : '(',
		']' : '[',
		'}' : '{'
	}
	fmt.Println(len(hmp))
}

  报如下错误:

  • 在复合文字中的换行符前面需要尾随逗号
  • 应为 ',' 或 new line

探究Golang的编译细节

In effect, newlines following certain tokens are converted into semicolons, so where newlines are placed matters to proper parsing of Go code.

  也就是说go编译器会在特定的符号后加入分号;来分行,而C/C++的分行是交给程序员的,也就解释了为什么逗号,会在两种编译情况下产生完全不同的表达。   在go编译器中,上述代码会这样解释:

func main(); 
{
	a := 1;
	if a != 1 {
		
	};
	else {
		
	};
};
func main() {
	hmp := map[byte]byte{
		')' : '(',
		']' : '[',
		'}' : '{';
	};
	fmt.Println(len(hmp));
};

  由于分号问题,不能识别函数,if-else的匹配,函数的传参,所以编译会报错。这里我们再列出go会自动在其结尾添加分号的这些特殊符号:

  1. 标识符
  2. 字面量 (数字、字符串、布尔值等)
  3. 关键字break, continue, fallthrough, return
  4. 特殊运算++ --
  5. 特殊分隔符 ) ] }


文章作者: Commander
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 Commander !
  目录