内置关键字
均为小写,关键字不能作为标识符使用
| break | default | func | interface | select | 
|---|---|---|---|---|
| case | defer | go | map | struct | 
| chan | else | goto | package | switch | 
| const | fallthrough | if | range | type | 
| continue | for | import | return | var | 
除了以上,还有一些预定义标识符
| append | bool | byte | cap | close | complex | complex64 | complex128 | uint16 | 
|---|---|---|---|---|---|---|---|---|
| copy | false | float32 | float64 | imag | int | int8 | int16 | uint32 | 
| int32 | int64 | iota | len | make | new | nil | panic | uint64 | 
| println | real | recover | string | true | uint | uint8 | uintptr | 
程序的代码通过语句来实现结构化。每个语句不需要像 C 家族中的其它语言一样以分号
;结尾,因为这些工作都将由 Go 编译器自动完成
Go 包
定义
每个Go文件都属于且仅属于一个包,一个包可以由许多以.go为扩展名的源文件组成,因此文件名和包名一般来说都是不相同的。必须在源文件中非注释的第一行中指明该文件属于哪个包,package main。package main表示一个可独立执行的程序,每个Go应用程序都包含一个名为main的包。所有的包名应该都是小写
如果想要构建一个程序,则包和包内的文件都必须以正确的顺序进行编译。包的依赖关系决定了其构建顺序。
属于同一个包的源文件必须全部被一起编译,一个包即是编译时的一个单元,因此根据惯例,每个目录都只包含一个包。
如果对一个包进行更改或重新编译,所有引用了这个包的客户端程序都必须全部重新编译。
Go 中的包模型采用了显式依赖关系的机制来达到快速编译的目的,编译器会从后缀名为 .o 的对象文件(需要且只需要这个文件)中提取传递依赖类型的信息。
如果 A.go 依赖 B.go,而 B.go 又依赖 C.go:
- 编译 
C.go,B.go, 然后是A.go. - 为了编译 
A.go, 编译器读取的是B.o而不是C.o. 
导入
如果包名不是以 . 或 / 开头,如 "fmt" 或者 "container/list",则 Go 会在全局文件进行查找;如果包名以 ./ 开头,则 Go 会在相对目录中查找;如果包名以 / 开头(在 Windows 下也可以这样使用),则会在系统的绝对路径中查找。
导入单个包:
1  | // 单个包  | 
多个包
1  | // 多个  | 
别名
1  | // 别名 alias  | 
省略
1  | // 省略调用,不建议使用  | 
如果导入一个包没有是使用它,在构建程序时,会抛出错误
imported and not used: os
可见性规则
Go 语言中,使用大小写来决定该常量、变量、类型、接口、结构或函数是否可以被外部包所调用:
根绝约定,函数名首字母小写即为 private,对包外不可见,在包内是可以可见并可用的
1  | func getField(i int)  | 
函数名首字母大写为 public,被视为导出
1  | func Printf(i int)  | 
func 函数
main 函数是每一个可执行程序所必须包含的,一般来说都是在启动后第一个执行的函数,如果有 init() 函数则会先执行该函数。
1  | // 当前程序的包名  | 
输出:
1  | -- func init execute --  | 
如果你的 main 包的源代码没有包含 main 函数,则会引发构建错误 undefined: main.main。main 函数既没有参数,也没有返回类型(与 C 家族中的其它语言恰好相反)。如果你不小心为 main 函数添加了参数或者返回类型,将会引发构建错误:
1  | func main must have no arguments and no return values results.  | 
注释
几乎所有全局作用域的类型、常量、变量、函数和被导出的对象都应该有一个合理的注释。如果这种注释(称为文档注释)出现在函数前面,例如函数 Abcd,则要以 "Abcd..." 作为开头。
1  | // enterOrbit causes Superman to fly into low Earth orbit, a position  |