为啥这里需要分号?

Posted

技术标签:

【中文标题】为啥这里需要分号?【英文标题】:Why do I need a semicolon here?为什么这里需要分号? 【发布时间】:2010-12-15 18:06:43 【问题描述】:

这是一个测试 Go 程序:

package main
import fmt "fmt"
func main () 
    ex := "moo cow\n";
    fmt.Print (ex)

使用分号,它可以编译。但是,如果分号被删除,它不会:

string.go:5: fmt 附近的语法错误

有什么想法吗?


更新(2012 年 3 月):较新的 Go 版本能够编译两种形式(带和不带分号)。

【问题讨论】:

【参考方案1】:

来自The Go Programming Language Specification:

语句列表的元素是 用分号隔开,可以是 仅当前一个时省略 声明:

以声明列表的右括号“)”结尾;或 以不属于表达式的右大括号“”结尾。

【讨论】:

是的,似乎是它如何解析文本的问题。无论如何,我可能最终会自己输入所有分号。除非不允许。没用过就知道了。【参考方案2】:

嗯,从技术上讲,答案在这里:http://golang.org/doc/effective_go.html#semicolons,但不是很清楚。看起来你可以在语句的末尾留下分号,但不是表达式。我认为(我在这里不确定)表达式是任何带有“=”(或“:=”)的东西(尽管 += 在本教程中似乎没问题?)

【讨论】:

读完之后,听起来你就像在 Pascal 中那样使用它们来分隔语句。在块之外,您不需要它们。 很好的答案 +1。我在这里引用了你***.com/a/64381507/12817546。

以上是关于为啥这里需要分号?的主要内容,如果未能解决你的问题,请参考以下文章

为啥 while(condition);末尾需要分号,但 while(condition) 不需要? [关闭]

公用表表达式,为啥要分号?

为啥按分号后程序又回到深度递归?

为啥我应该在javascript中的每个函数后使用分号?

为啥命令的 windows shell 替换分号?

我看到花括号、括号和分号彼此相邻,为啥?