内容简介:(先思考一下,答案需翻页。)↓
首先以一个小问题开头。请问下面这个程序的编译运行将表现出何种行为? 三个选项:
-
编译不通过;
-
打印输出“真”;
-
打印输出“假”。
package main
func alwaysFalse() bool {
return false
}
func main() {
switch alwaysFalse()
{
case true:
println("真")
case false:
println("假")
}
}
(先思考一下,答案需翻页。)
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
↓
OK,公布答案。答案是2, 打印输出“真 ”。答对的可随意继续或返回。答错的同志继续阅读下面的解释。
有些答错的同志可能觉得此程序编译不过,因为 switch 代码块的开大括号 { 被放在了下一行,这在 Go 中时不允许的。其实非也,其实Go语言的断行规则定义如下:
-
在Go代码中,注释除外,如果一个代码行的最后一个语法词段(token)为下列所示之一,则一个分号将自动插入在此字段后(即行尾):
-
一个标识符;
-
一个整数、浮点数、虚部、码点或者字符串字面表示形式;
-
这几个跳转关键字之一:
break、continue、fallthrough和return; -
自增运算符
++或者自减运算符--; -
一个右括号:
)、]或}。
为了允许一条复杂语句完全显示在一个代码行中,分号可能被插入在一个右小括号 )
或者右大括号 }
之前。
很多人印象中的规则“ 代码块的开大括号不能被放在下一行 ”其实只是一个通常的而非普适的规则。根据上述规则,上面这个程序中的 switch 代码块在编译前将被改写为如下所示(注意插入的几个分号):
switch alwaysFalse();
{
case true:
println("真");
case false:
println("假");
};
另外有些答错的同志可能觉得此程序运行时应该打印输出“假”。这里,我们还需要知道Go中关于 switch 代码块的另一个常识: s witch 代码块中开大括号 { 前的比较表达式可以省略,其默认值为 true 。因此上面这个 switch 代码块将被继续改写为如下所示:
switch alwaysFalse();
true {
case true:
println("真");
case false:
println("假");
};
到此为止,我们可以清楚地得知此程序为什么会打印输出“真”了。
结尾展示另外一段编译没问题但有些不符常规的代码:
package main
func main() {
for i, j := 0, 10
i < 10
j-- {
if i++
i > j {
break
}
println(i)
}
}
以上所述就是小编给大家介绍的《Go 语言中关于断行规则的一个细节》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 煦涵说CSS文本断行
- MQTT Essential 细节笔记总结(深入理解MQTT细节)
- MetInfo 7.0.0 20200326 细节优化补丁,主要优化商城相关细节
- MetInfo7.0.0 20200407 细节优化补丁,修复编辑及手机端细节
- php 的小细节
- 2021 Raft 实现细节
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
The Everything Store
Brad Stone / Little, Brown and Company / 2013-10-22 / USD 28.00
The definitive story of Amazon.com, one of the most successful companies in the world, and of its driven, brilliant founder, Jeff Bezos. Amazon.com started off delivering books through the mail. Bu......一起来看看 《The Everything Store》 这本书的介绍吧!