A tour of go 笔记

编程语言
文章目录
  1. 1. 基础

突击人

基础

按照约定,包名与导入路径的最后一个元素一致。例如,”math/rand” 包中的源码均以 package rand 语句开始。 调用就 rand.Xxx

连续两个或多个函数的已命名形参类型相同时,除最后一个类型以外,其它都可以省略。

命名返回值:

1
2
3
4
5
func split(sum int) (x, y int) {
x = sum * 4 / 9
y = sum - x
return
}

var 语句用于声明一个变量列表,跟函数的参数列表一样,类型在最后。 var a int

函数外的每个语句都必须以关键字开始(var, func 等等),因此 := 结构不能在函数外使用。

没有明确初始值的变量声明会被赋予它们的零值。

表达式 T(v) 将值 v 转换为类型 T。要显示类型转换。

常量的声明与变量类似,只不过是使用 const 关键字。不能用 :=

1
2
3
for i := 0; i < 10; i++ {
sum += i
}

可以省略一三个语句(及其分号)变为 while。可以全省略变为 while(true)。

在 if 的简短语句中声明的变量同样可以在任何对应的 else 块中使用。

1
2
3
4
5
6
if v := math.Pow(x, n); v < lim {
return v
} else {
fmt.Printf("%g >= %g\n", v, lim)
}
// 这里开始就不能使用 v 了

go switch 默认 break。

defer 推迟的函数调用会被压入一个栈中。当外层函数返回时,被推迟的函数会按照后进先出的顺序调用。

类型 *T 是指向 T 类型值的指针。

1
2
3
4
5
6
type Vertex struct {
X int
Y int
}
var v1 = Vertex{1, 2} // 创建一个 Vertex 类型的结构体
var v2 = Vertex{X: 1} // Y:0 被隐式地赋予

指针访问成员也用点号。

数组 [10]int。 每个数组的大小都是固定的。而切片则为数组元素提供动态大小的、灵活的视角。在实践中,切片比数组更常用。

类型 []T 表示一个元素类型为 T 的切片。 a[low:high] 左闭右开。切片就像数组的引用。切片用法就像没有长度的数组用法。

切片拥有长度和容量。切片的长度就是它所包含的元素个数。切片的容量是从它的第一个元素开始数,到其底层数组元素末尾的个数。

1
2
3
4
5
a := make([]int, 5)  // len(a)=5

for i, v := range pow {
fmt.Printf("2**%d = %d\n", i, v)
}

所有给定类型的方法都应该有值或指针接收者,但并不应该二者混用。

即便接口内的具体值为 nil,方法仍然会被 nil 接收者调用。

为了判断一个接口值是否保存了一个特定的类型,类型断言可返回两个值:其底层值以及一个报告断言是否成功的布尔值。