# Go 语言中 make 和 new 的区别 🔍

在 Go 语言中, makenew 都是用于内存分配的内建函数,但它们的使用场景和行为有着明显的区别。让我们深入了解这两个函数的特点和应用! 💡

# new 函数详解 🎯

new 函数主要用于值类型的内存分配,如 intfloatstruct 等。它的特点是:

func new(Type) *Type
// 使用示例
ptr := new(int)    //ptr 的类型是 *int
*ptr = 100         // 通过指针设置值
fmt.Println(*ptr)  // 输出: 100

# new 的关键特性:

  • 返回类型是指针 👉
  • 自动将内存置为零值 ✨
  • 常用于基本数据类型和结构体 🏗️

# make 函数详解 🛠️

make 函数专门用于引用类型的内存分配,包括 slicemapchannel 。它的函数签名是:

func make(t Type, size ...IntegerType) Type
// 使用示例
slice := make([]int, 3, 5)    // 创建长度为 3,容量为 5 的切片
m := make(map[string]int)     // 创建 map
ch := make(chan int, 2)       // 创建带缓冲的 channel

# make 的关键特性:

  • 返回的是类型本身,而非指针 🎯
  • 会进行必要的初始化 ⚙️
  • 可以指定容量或长度等参数 📏

# make 和 new 的核心区别 🔥

  1. 创建目的不同

    • new : 为值类型分配内存 💫
    • make : 为引用类型分配并初始化内存 🌟
  2. 返回类型不同

    • new : 返回指向零值的指针 👆
    • make : 返回初始化后的实例 ✨
  3. 初始化行为不同

    • new : 仅分配内存并置零 🆕
    • make : 分配内存并执行必要的初始化 🔄
  4. 适用类型不同

    • new : 可用于任何类型 🎯
    • make : 仅用于 slice、map、channel 📦

# 实际应用示例 💻

// 使用 new
type Person struct {
    Name string
    Age  int
}
p := new(Person)  //p 是 *Person 类型
p.Name = "张三"    // 可以直接使用点号访问字段
// 使用 make
s := make([]int, 3)     // 创建切片
m := make(map[string]int)  // 创建 map
ch := make(chan int)    // 创建 channel

# 使用建议 💡

  1. 需要指针时,使用 new
  2. 创建切片、映射或通道时,使用 make
  3. 记住: new 分配内存, make 分配并初始化 ✨

希望这篇文章帮助你更好地理解 Go 语言中 makenew 的区别!加油! 🚀

更新于 阅读次数

请我喝[茶]~( ̄▽ ̄)~*

ZJM 微信支付

微信支付

ZJM 支付宝

支付宝