包的使用
每个 Go 程序都是由包组成的。 程序运行的入口是包 main 。 这个程序使用并导入了包 “fmt“ 和 “math/rand“ 。 按照惯例,包名与导入路径的最后一个目录一致。例如,”math/rand“ 包由 package rand 语句开始。
导出名称
在 Go 中,首字母大写的名称是被导出的。 在导入包之后,只能访问包所导出的名字,任何未导出的名字是不能被包外的代码访问的。 Foo 和 FOO 都是被导出的名称。名称 foo 是不会被导出的。
函数
函数可以没有参数或接受多个参数。 在这个例子中, add 接受两个 int 类型的参数。 注意类型在变量名之后。 当两个或多个连续的函数命名参数是同一类型,则除了最后一个类型之外,其他都可以省略。
package main
import "fmt"
func add(x int, y int) int { // (x int, y int) 可写为 (x, y int)
return x + y
}
func main() {
fmt.Println(add(42, 13))
}
函数多值返回
函数可以返回任意数量的返回值。 Go 的返回值可以被命名,并且就像在函数体开头声明的变量那样使用。 返回值的名称应当具有一定的意义,可以作为文档使用。 没有参数的 return 语句返回各个返回变量的当前值。这种用法被称作“裸”返回。 直接返回语句仅应当用在像下面这样的短函数中。在长的函数中它们会影响代码的可读性。
package main
import "fmt"
func swap(x, y string) (string, string) {
return y, x
}
func main() {
a, b := swap("hello", "world")
fmt.Println(a, b)
}
变量
Go 的基本类型有
bool
string
int int8 int16 int32 int64
uint uint8 uint16 uint32 uint64 uintptr
byte // uint8 的别名
rune // int32 的别名
// 代表一个Unicode码
float32 float64
complex64 complex128
defer语句
defer 语句会延迟函数的执行直到上层函数返回。 延迟调用的参数会立刻生成,但是在上层函数返回前函数都不会被调用。 延迟的函数调用被压入一个栈中。当函数返回时, 会按照后进先出的顺序调用被延迟的函数调用。