当前位置: 技术文章>> Go 中的 new() 和 make() 函数 – 何时使用new函数,何时使用make函数

文章标题:Go 中的 new() 和 make() 函数 – 何时使用new函数,何时使用make函数
  • 文章分类: 后端
  • 22806 阅读

Go,也称为 Golang,是一种静态类型的编译编程语言,旨在实现简单性和效率。

在处理切片、地图和通道等数据结构时,您可能会遇到 和 函数。虽然两者都用于内存分配,但它们有不同的用途。new()make()

在本文中,我们将探讨 Go 和 中的区别,并讨论何时使用它们。new()make()

功能new()

Go 中的函数是一个内置函数,它为指定类型的新零值分配内存,并返回指向该值的指针。它主要用于初始化和获取指向给定类型的新分配的零值的指针,通常用于结构等数据类型。new()

下面是一个简单的示例:

package mainimport "fmt"type Person struct {

    Name    string

    Age     int

    Gender  string}func main() {

    // Using new() to allocate memory for a Person struct

    p := new(Person)

    // Initializing the fields

    p.Name = "John Doe"

    p.Age = 30

    p.Gender = "Male"

    fmt.Println(p)}

在此示例中,为新结构分配内存,并且是指向新分配的零值的指针。new(Person)Personp

功能make()

另一方面,该函数用于初始化切片、映射和通道——需要运行时初始化的数据结构。与 不同,返回指定类型的初始化(非零化)值。make()new()make()

让我们看一个使用切片的示例:

package mainimport "fmt"func main() {

    // Using make() to create a slice with a specified length and capacity

    s := make([]int, 10, 15)

    // Initializing the elements

    for i := 0; i < 10; i++ {

        s[i] = i + 1

    }

    fmt.Println(s)}

在此示例中,创建一个长度为 10、容量为 15 的整数切片。该函数确保使用非零值初始化切片。make([]int, 10, 15)make()

何时使用和在 Go 中new()make()

用于值类型new()

在处理结构等值类型时,可用于为新的归零值分配内存。这适用于需要指向初始化结构的指针的方案。new()

p := new(Person)

用于引用类型:make()

对于切片、映射和通道(其中初始化涉及设置数据结构和内部指针),请使用创建初始化的实例。make()

s := make([]int, 5, 10)

指针与值:

请记住,返回一个指针,而返回一个非零值。根据是需要指针还是初始化值来选择适当的方法。new()make()

结论

了解 Go 中 和 之间的区别对于编写干净高效的代码至关重要。通过对适当的数据类型使用正确的方法,您可以确保在 Go 程序中正确分配和初始化内存。new()make()



推荐文章