Go语言 make 和 new 创建

在Go语言中,我们可以使用 makenew 关键字来创建对象。这两个关键字的作用有所不同,我们需要根据具体的需求来选择使用。

make

make 关键字用于创建切片、映射和通道等引用类型的数据结构。它的语法如下:

make(T, size)

其中,T 是要创建的数据结构的类型,size 是该数据结构的大小或者容量。

让我们来看一个使用 make 创建切片的示例:

package main

import "fmt"

func main() {
  // 创建一个长度为5的整型切片
  numbers := make([]int, 5)
  
  // 打印切片的长度和容量
  fmt.Printf("长度:%d,容量:%d\n", len(numbers), cap(numbers))
}

上面的代码中,我们使用 make 创建了一个长度为5的整型切片 numbers。然后,我们通过 lencap 函数来获取切片的长度和容量,并将其打印出来。

运行上述代码,输出结果如下:

长度:5,容量:5

从结果中可以看出,切片的长度和容量都为5。

new

new 关键字用于创建值类型的数据结构,并返回指向该数据结构的指针。它的语法如下:

new(T)

其中,T 是要创建的数据结构的类型。

让我们来看一个使用 new 创建结构体的示例:

package main

import "fmt"

type Person struct {
  Name string
  Age  int
}

func main() {
  // 创建一个 Person 结构体并返回指针
  person := new(Person)
  
  // 设置结构体字段的值
  person.Name = "Alice"
  person.Age = 20
  
  // 打印结构体字段的值
  fmt.Printf("姓名:%s,年龄:%d\n", person.Name, person.Age)
}

上面的代码中,我们使用 new 创建了一个 Person 结构体,并返回指向该结构体的指针 person。然后,我们通过指针来设置结构体字段的值,并将其打印出来。

运行上述代码,输出结果如下:

姓名:Alice,年龄:20

从结果中可以看出,我们成功地创建了一个 Person 结构体,并设置了其字段的值。

make 和 new 的区别

makenew 的区别主要有以下几点:

  • make 用于创建引用类型的数据结构,返回的是该数据结构的引用。而 new 用于创建值类型的数据结构,返回的是指向该数据结构的指针。
  • make 必须指定数据结构的大小或容量,而 new 不需要。
  • make 返回初始化后的数据结构,而 new 返回一个指向零值的指针。

根据具体的需求,我们可以选择使用 makenew 来创建对象。

序列图

下面是一个使用 makenew 创建对象的序列图:

sequenceDiagram
  participant Main
  participant Make
  participant New
  
  Main->>Make: 使用 make 创建对象
  Make->>Make: 初始化对象
  Make-->>Main: 返回对象引用
  
  Main->>New: 使用 new 创建对象
  New->>New: 初始化对象
  New-->>Main: 返回对象指针

序列图展示了使用 makenew 创建对象的过程。首先,主程序调用 makenew 来创建对象;然后,makenew 在内部初始化对象,并将其返回给主程序。

总结

在本文中,我们介绍了使用 makenew 关键字来创建对象的方法。通过 make,我们可以创建引用类型的数据结构;而通过 new,我们可以创建值类型的数据结构。根据具体的需求,我们可以选择使用 makenew 来创建对象。希望本文能够帮助你更好地理解和使用 makenew 关键字。