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
感谢您的帮助。拥有一个标准风格可能是件好事!我有点惊讶在正式文档中对此没有任何评论。
更多关于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的这个语法要求。所有控制结构(如if、for、switch)也都遵循同样的规则:
// 正确
if x > 0 {
fmt.Println("Positive")
}
// 错误 - 编译失败
if x > 0
{
fmt.Println("Positive")
}
Go语言规范在"分号"章节实际上隐含了这个规则:Go解析器会在特定位置自动插入分号,包括在换行符后,如果该行看起来是一个完整的语句。函数声明后的换行符会导致解析器认为函数声明已结束,因此后续的{会被视为语法错误。

