Go 中大部分数据类型都是值类型,比如整型、浮点型、字符串、数组、结构体、布尔等,值类型常会通过 & 取地址,在方法函数间传递可以避免拷贝。除了 & 取址,我们也可以使用 new 创建,返回的是对应类型的指针。

还有一部分类型,可以理解为引用类型,比如切片、映射、chan 等类型,使用它们一般不涉及取址操作,当然,它们本质是一个结构体,其中的指针类型成员指向了真正的内容。相对于值类型的 new,Go 引用类型的初始化基本都是通过 make 进行的。

指针从某种意义上看也是值类型,当然如果你关注的是指针指向地址的内容,可以把它理解为引用类型。