Golang新手语法谜题解析

Golang新手语法谜题解析 我是一个刚入门的新手!我安装了Go并尝试了Hello World程序:

package main

import "fmt"

func main() {
    fmt.Println("Hello, world.")
}

我是一个老派的C程序员,喜欢稍微不同的代码布局风格:

package main

import "fmt"

func main() 
{
    fmt.Println("Hello, world.")
}

但它给出了一个语法错误。我查看了Go的语法/文法页面,它只在空白符部分提到了换行符。这对我来说是个谜。


更多关于Golang新手语法谜题解析的实战教程也可以访问 https://www.itying.com/category-94-b0.html

5 回复

感谢您的帮助。拥有一个标准风格可能是件好事!我有点惊讶在正式文档中对此没有任何评论。

更多关于Golang新手语法谜题解析的实战系列教程也可以访问 https://www.itying.com/category-94-b0.html


作为一名C程序员,你可能更多地使用Vim作为编辑器,这非常好。不过,在这里你可以使用IDE Goland——它会处理这些事情。

嗨,@bobkummerfeld,Go 语言在其语法的这个方面非常严格,允许将花括号放在单独的行上。这使得解析更容易,并且至少消除了花括号/换行/制表符风格争论中的一个问题!

编辑:常见问题解答的相关链接:http://golang.org/doc/faq#semicolons

bobkummerfeld:

感谢您的帮助。采用标准风格可能是件好事!我有点惊讶在官方文档中没有看到关于这方面的评论。

有的:Effective Go - The Go Programming Language。与C语言不同(我曾是内核开发者),Go明确选择了一些规则作为其默认规则,我们必须接受这一点。一个显著的规则是它选择了驼峰命名法而非其他方式。

vinu2003:

不过,在这里你可以使用IDE Goland——它会处理这些事情。

实际的VIM方式是使用golang-lint(GitHub - golangci/golangci-lint: Fast linters Runner for Go)和vim-go(GitHub - fatih/vim-go: Go development plugin for Vim)。

在Go语言中,函数声明的左大括号 { 必须与函数声明在同一行,这是Go语法的一个硬性规定。这与C语言不同,C语言允许左大括号放在新的一行。

你的第二个示例代码:

func main() 
{
    fmt.Println("Hello, world.")
}

会编译失败,因为Go解析器期望在函数声明后立即看到左大括号。

正确的Go代码必须写成:

func main() {
    fmt.Println("Hello, world.")
}

这是Go语言设计中的一项明确选择,旨在统一代码风格,避免因大括号位置引发的风格争论。Go工具链(如gofmt)会自动强制这种格式。

如果你习惯C风格的大括号位置,需要适应Go的这个语法要求。所有控制结构(如ifforswitch)也都遵循同样的规则:

// 正确
if x > 0 {
    fmt.Println("Positive")
}

// 错误 - 编译失败
if x > 0 
{
    fmt.Println("Positive")
}

Go语言规范在"分号"章节实际上隐含了这个规则:Go解析器会在特定位置自动插入分号,包括在换行符后,如果该行看起来是一个完整的语句。函数声明后的换行符会导致解析器认为函数声明已结束,因此后续的{会被视为语法错误。

回到顶部