注:本文是《Go语言核心编程》(李文塔/著)个人读书笔记
规则 1 相同类型变量可在末尾带上类型 2 如果不带类型,则进行类型推断 3 多值赋值语句每个变量后面不能带上类型 格式 右边可是一个返回函数表达式,可以是range对map clice 等函数的操作,也可以是类型推断 赋值的左边需要和右边的的值数量一致,从左到右依次赋值
for range 下的迭代变量值是共享的
副作用 defer 可能对返回值的修改 defer 对性能的影响 在定义函数是使用不带返回值名的格式,通过这种方式,defer就不能直接引用返回值的栈区,也就避免了返回值被修改的问题
数组是固定了相同元素类型的数据结构,底层采用连续的内存地址空间存放,数组大小一旦声明就无法改变。 数组的创建方式 1指定大小的显示初始化 2 通过... 由后面的元素格式推断数组大小 3 指定大小,并通过索引值初始化 ,未显示初始化的元素被设置为类型零值 4指定大小但是不显示初始化,数组元素被设置为零值 数组的一切传递都是值拷贝 1数组间的直接赋值 2 数组作为函数参数 3 数组内嵌到struct中
切片创建 1通过数组创建 2 通过make 创建 3 直接声明 切片的数据结构 数据结构有三个成员,分别是指向底层数组的指针、切片的当前大小和底 层数组的大小 。当 !en 增长超过 cap 时,会申请一个更大容量的底层数组,并将数据从老数组复 制到新申请的数组中。
//src/runtime/slice . go
type slice struct {
array unsafe .Pointer
len int
cap int
}