Golang的引用类型包括 slice、map 和 channel。它们有复杂的内部结构,除了申请内存外,还需要初始化相关属性。对于引用类型,变量存储的是一个地址,这个地址存储最终的值。内存通常在堆上分配,通过GC回收。获取指针类型所指向的值,使用:" * " 取值符号 。比如:var *p int, 使用 *p 获取 p 指向的值。

切片是数组的一个引用,因此切片是引用类型。但自身是结构体,值拷贝传递。切片的长度可以改变,因此,切片是一个可变的数组。切片遍历方式和数组一样,可以用len()求长度。表示可用元素数量,读写操作不能超过该限制。cap可以求出slice最大扩张容量,不能超出数组限制。0 <= len(slice) <= len(array),其中array是slice引用的数组。切片的定义:var 变量名 []类型,比如 var str []string var arr []int。如果 slice == nil,那么 len、cap 结果都等于 0。类似unix中管道(pipe)先进先出线程安全,多个goroutine同时访问,不需要加锁channel是有类型的,一个整数的channel只能存放整数