Hello,World
有人说,程序员的最高荣誉,是死后在墓碑上刻上“hello,world”。
hello world这个例子,首次出现于1978年出版的C语言圣经《The C Programming Language》。C语言是直接影响Go语言设计的语言之一。这个例子体现了Go语言一些核心理念。
用go来写hello world是这样的。
package main
import "fmt"
func main() {
fmt.Println("Hello, World")
}
Go语言是一门静态的编译型语言,我们通常使用go build来编译一个go文件。如刚才的helloworld.go。使用 go build helloworld.go 即可将刚才的helloworld.go编译为一个可执行的二进制文件。
利用go run helloworld.go 即可直接执行,利用go get gopl.io/ch1/helloworld 即可将本文中的代码下载到本地。使用go help,我们可以查询到更多的go命令。
Go is a tool for managing Go source code.
Usage:
go command [arguments]
The commands are:
build compile packages and dependencies
clean remove object files
doc show documentation for package or symbol
env print Go environment information
bug start a bug report
fix run go tool fix on packages
fmt run gofmt on package sources
generate generate Go files by processing source
get download and install packages and dependencies
install compile and install packages and dependencies
list list packages
run compile and run Go program
test test packages
tool run specified go tool
version print Go version
vet run go tool vet on packages
Use "go help [command]" for more information about a command.
Additional help topics:
c calling between Go and C
buildmode description of build modes
filetype file types
gopath GOPATH environment variable
environment environment variables
importpath import path syntax
packages description of package lists
testflag description of testing flags
testfunc description of testing functions
Use "go help [topic]" for more information about that topic.
Go语言的代码是通过package(包)来组织的,package类似于其他语言里的libraries或者modules。一个package由位于同一个目录下的一个或多个.go源文件组成。每个源文件都以一条package声明语句开始,这个例子里就是package main,表示该文件属于那个package,紧跟着是一系列的导入(import)包,之后是存储在这个文件里的程序语句。
Go的标准库提供了100多个包,以支持常见功能,如输入、输出、排序以及文本处理。比如fmt包,就含有格式化输出、接收输入的函数。Println是其中一个基础函数,可以打印以空格间隔的一个或多个值,并在最后添加一个换行符,从而输出一整行。
main包比较特殊。它定义了一个独立可执行的程序,而不是一个库。在main里的main 函数 也很特殊,它是整个程序执行时的入口。main函数所做的事情就是程序做的。当然了,main函数一般调用其它包里的函数完成很多工作, 比如fmt.Println。
必须告诉编译器源文件需要哪些包,这就是import声明以及随后的package声明扮演的角色。hello world例子只用到了一个包,大多数程序需要导入多个包。
必须恰当导入需要的包,缺少了必要的包或者导入了不需要的包,程序都无法编译通过。这项严格要求避免了程序开发过程中引入未使用的包。Go也以此来提高其编译速度。
import声明必须跟在文件的package声明之后。随后,则是组成程序的函数、变量、常量、类型的声明语句(分别由关键字func, var, const, type定义)。这些内容的声明顺序并不重要。这个例子的程序已经尽可能短了,只声明了一个函数, 其中只调用了一个其他函数。为了节省篇幅,有些时候, 示例程序会省略package和import声明,但是,这些声明在源代码里有,并且必须得有才能编译。
一个函数的声明由func关键字、函数名、参数列表、返回值列表(这个例子里的main函数参数列表和返回值都是空的)以及包含在大括号里的函数体组成。第五章进一步考察函数。
Go语言不需要在语句或者声明的末尾添加分号,除非一行上有多条语句。实际上,编译器会主动把特定符号后的换行符转换为分号, 因此换行符添加的位置会影响Go代码的正确解析。举个例子, 函数的左括号{必须和func函数声明在同一行上, 且位于末尾,不能独占一行,而在表达式x + y中,可在+后换行,不能在+前换行。
Go语言在代码格式上采取了很强硬的态度。gofmt工具把代码格式化为标准格式,并且go工具中的fmt子命令会对指定包, 否则默认为当前目录, 中所有.go源文件应用gofmt命令。本书中的所有代码都被gofmt过。你也应该养成格式化自己的代码的习惯。以法令方式规定标准的代码格式可以避免无尽的无意义的琐碎争执。更重要的是,这样可以做多种自动源码转换,如果放任Go语言代码格式,这些转换就不大可能了。
很多文本编辑器都可以配置为保存文件时自动执行gofmt,这样你的源代码总会被恰当地格式化。还有个相关的工具,goimports,可以根据代码需要, 自动地添加或删除import声明。这个工具并没有包含在标准的分发包中,可以用下面的命令安装:
$ go get golang.org/x/tools/cmd/goimports
对于大多数用户来说,下载、编译包、运行测试用例、察看Go语言的文档等等常用功能都可以用go的工具完成。
Go语言的IDE很多,但是用的最舒适的一个还是Gogland。
网友评论