在 Go 语言中, 和 都是用于内存分配的内建函数,但它们的作用对象、返回类型以及底层行为有非常明显的区别。 简单总结: :只分配内存,不初始化内存(只置为零值),返回指针。 :分配内存并初始化内部数据结构,返回值(仅用于 slice, map, channel)。 --- 详细对比 1. 函数 语法: 作用: 1. 为类型 分配一块内存。 2. 将这块内存的内容清零(即设置为该类型的零值,如 int 为 0,bool 为 false)。 3. 返回指向这块内存的指针()。 适用类型:任意类型(包括基本类型、结构体等)。 类比:就像给你一个空盒子,里面什么都没有(或者说是默认的填充物),但把盒子的地址给了你。 示例: 2. 函数 语法: 作用: 1. 分配内存。 2. 初始化底层的数据结构(不仅仅是清零,还包括设置长度、容量、哈希桶、等待队列等)。 3. 返回该类型的值(),而不是指针。 适用类型:仅限 slice(切片)、map(字典) 和 channel(通道)。 原因:这三种类型在 Go 内部是复杂的结构,必须经过初始化才能使用。例如,slice 内部包含指向底层数组的指针...