jok*_*oon 27 coding-style curly-braces go
正确:
if(true) {
}
Run Code Online (Sandbox Code Playgroud)
不正确的:
if(true)
{
}
Run Code Online (Sandbox Code Playgroud)
为什么这种风格被强制执行,它是否与语言规范有关,还是因为他们更喜欢一种风格而不是另一种?
Mat*_*all 40
为什么有括号但没有分号?为什么我不能把开口支架放在下一行?
Go使用括号括号进行语句分组,这是一种熟悉C系列中任何语言的程序员所熟悉的语法.但是,分号用于解析器,而不是用于人,我们希望尽可能地消除它们.为了实现这个目标,Go借用了BCPL的一个技巧:分隔语句的分号在形式语法中,但是在任何可能是语句结尾的行末尾的词法分析器自动注入,而不是预测.这在实践中非常有效,但具有强制支撑样式的效果.例如,函数的左大括号本身不能出现在一行上.
http://golang.org/doc/faq#semicolons
def*_*ode 25
大多数C下降的语言都使用该样式if ( <condition> ) <statement>
,statement
如果condition
是真的则执行.在statement
可以是单个语句或支柱封闭块.
Go的if
语句需要一个跟随括号的封闭块,而不是单个语句.这是为了避免大多数样式指南试图通过要求所有语句都使用大括号来避免的常见错误if
.
//subtle error in C
if (<condition>)
<statement1>;
<statement2>;
Run Code Online (Sandbox Code Playgroud)
现在,Go在if
语句后面需要一个大括号块,这()
是多余的.它们只用于帮助词法分析器区分条件和语句,否则if <condition> <statement>
很难解析.(条件何处结束,语句开始?)
现在Go的作者决定:
()
{
遵循<condition>
他们认为裁员是不可取的.这有第二个副作用.由于;
每个换行都有一个隐含的,如果{
是在下一行;
,则在<condition>
和之间放置一个{
.Go的作者再次面临一个决定:
<condition>; {
构造有所了解if ... {
同一条线上的共同风格.<condition>
在一条线上.解析器的特殊外壳是一件非常糟糕的事情.看看速度D和Go解析器与C++糟糕的解析器性能相比.统一的风格也是一件好事.鉴于约束条件,他们的最终决定非常简单.
Mik*_*ike 23
我认为这种强制性的东西只是让人们喜欢K&R风格的借口,而不必看到Allman的风格.如果设计师喜欢Allman风格,那么他或她就会简单地让解析器处理它.想象一下,如果XML是用K&R编写的.看起来似乎无法理解.Allman风格更容易阅读.这似乎完全是一种情绪化的决定.我也会做一个:忽略Go.
它与Spec有关,也就是说它不仅仅是他们在编译器中构建的东西
分号
形式语法使用分号";" 作为许多作品的终结者.Go程序可以使用以下两个规则省略大多数这些分号:
当输入被分解为令牌时,如果该行的最终令牌是,则在非空行的末尾自动将分号插入到令牌流中
- 标识符
- 整数,浮点,虚数,符文或字符串文字
- 其中一个关键字是break,continue,fallthrough或return
- 其中一个运算符和分隔符++, - ,),]或}
为了允许复杂语句占用一行,在结束")"或"}"之前可以省略分号.
为了反映惯用语,本文档中的代码示例使用这些规则省略分号.
据我从他们的谈话抓住了,他们想摆脱格式,讨论和扩展了的greation想法gofmt
归档时间: |
|
查看次数: |
16149 次 |
最近记录: |