本文基于Go 1.19版本。
hello, world
按照惯例,我们从“hello, world”程序开始,创建helloworld.go文件如下:
1
2
3
4
5
6
7
package main
import "fmt"
func main() {
fmt.Println("Hello, 世界")
}
go run和go build
输入如下命令:
1
go run hellworld
将会输出“Hello, 世界”,和许多较新的语言一样,Go语言原生支持Unicode,无需做特殊处理即可处理所有国家的语言。
Go是编译型的语言,采用如下命令生成可执行文件,并可直接执行:
1
2
go build helloworld.go
./helloworld
package和import
Go代码是通过package来组织的,在每个源文件开始都会用package指明属于哪个package。在本例中helloworld.go便属于package main。
package main和其他package有所不同,它通常用来定义一个独立的可执行程序。
在package后,紧跟着import来导入所需要的包,本例中即导入了fmt。
函数
在Go语言中,函数的声明为如下格式:
1
2
3
func main(argc int, argv []string) int {
}
从前往后分别为func关键字、函数名、参数列表、返回值列表和函数体。
和C语言不同,函数的返回值列表定义在函数名和参数列表的后方。这种定义方式对一些复杂的声明看起来会比C风格的定义方式要更为直观。
考虑Go’s Declaration Syntax中介绍的某个例子,函数的参数和返回值均含有函数指针:
C:
int (*(*fp)(int (*)(int, int), int))(int, int)
Go:
f func(func(int,int) int, int) func(int, int) int
这种靠后的声明显然更为直观,实际上Go的变量声明也是将参数类型后置,同样在许多场景下会显得更为直观而少歧义,例如指针声明。
格式
Go对格式要求较为严格,但同时也提供了gofmt工具以自动化格式代码。go的子命令fmt也是gofmt的封装,用来格式化指定包里或当前文件夹中的所有文件。
参考
- The Go Programming Language