为了账号安全,请及时绑定邮箱和手机立即绑定

为什么 Golang 强制大括号不在下一行?

为什么 Golang 强制大括号不在下一行?

Go
慕妹3242003 2021-06-14 08:09:50
正确的:if(true) {}不正确:if(true){}为什么强制执行这种风格,是否与语言规范有关,或者仅仅是因为他们更喜欢一种风格而不是另一种风格?
查看完整描述

3 回答

?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

大多数C派生语言都使用 style if ( <condition> ) <statement>,statement如果condition为真则执行。在statement可以是单个语句或支柱封闭块。


Go 的if语句需要后面的大括号括起来的块,而不是单个语句。这是为了避免大多数风格指南通过要求所有语句都使用大括号来避免的常见错误if。


//subtle error in C

if (<condition>)

  <statement1>;

  <statement2>;

现在,Go 在if语句之后需要一个大括号块,这些语句()是多余的。它们仅用于帮助词法分析器区分条件和语句,否则if <condition> <statement>很难解析。(条件在哪里结束,语句从哪里开始?)


现在 Go 的作者有一个决定:

  • 保留多余的 ()

  • 需要{遵循<condition>

他们认为裁员是不可取的。这有第二个副作用。由于;在每个换行符处都有一个隐式,如果{是在下一行,a;会被放在<condition>和之间{。Go 的作者再次面临一个决定:

  • 特殊情况下解析器对<condition>; {构造很聪明

  • 要求大家统一风格if ... {

  • 要求<condition>在一行上。

解析器的特殊外壳是一件非常糟糕的事情。看看与 C++ 糟糕的解析器性能相比,D和 Go 解析器的速度。统一的风格也是一件好事。考虑到限制,他们的最终决定非常简单。


查看完整回答
反对 回复 2021-06-21
  • 3 回答
  • 0 关注
  • 800 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信