golang new make

发布时间:2024-12-23 08:43:04

Golang中的new和make

Golang是Google开发的一种编程语言,它的设计目标是通过简洁的语法和强大的并发能力来提高程序员的效率。在Golang中,我们经常会遇到需要创建新的变量或者数据结构的场景,这时就需要使用到new和make这两个关键字。

new关键字

在Golang中,new关键字用于创建一个指向新分配零值的指针,并返回该指针。我们可以使用new关键字来创建一个基本类型的指针变量,也可以用它来创建一个结构体指针。

下面是new关键字的使用示例:

package main

import "fmt"

func main() {
    var p *int
    p = new(int)
    
    fmt.Println(*p) // 输出 0
}

在上面的代码中,我们使用new关键字创建了一个int类型的指针变量p,并将其赋值为nil。由于new函数分配了一块内存空间,并将其置为零值,所以*p的初始值为0。

除了基本类型,我们还可以使用new关键字创建结构体的指针变量:

package main

import "fmt"

type Person struct {
    Name string
    Age  int
}

func main() {
    p := new(Person)
    
    fmt.Println(*p) // 输出 {"" 0}
}

在上面的代码中,我们使用new关键字创建了一个Person类型的指针变量p,并将其赋值为nil。因为Person的零值是一个空字符串和0,所以*p的初始值为{"" 0}。

make关键字

与new关键字不同,make关键字用于创建特定类型的对象,例如切片、映射和通道。make函数分配了一块未初始化的内存,将其置为零值,并返回该对象的引用。

下面是make关键字的使用示例:

package main

import "fmt"

func main() {
    s1 := make([]int, 3, 5)
    
    fmt.Println(s1)        // 输出 [0 0 0]
    fmt.Println(len(s1))   // 输出 3
    fmt.Println(cap(s1))   // 输出 5
    
    m1 := make(map[string]int)
    
    fmt.Println(m1)        // 输出 map[]
    
    ch := make(chan int)
    
    fmt.Println(ch)        // 输出 0xc00001e0c0
}

在上面的代码中,我们使用make关键字分别创建了一个切片变量s1、一个映射变量m1和一个通道变量ch。make函数会根据后面的参数决定创建的类型和长度。

对于切片来说,第一个参数是切片的类型,第二个参数是切片的长度,第三个参数是切片的容量。上面的代码中,s1是一个长度为3、容量为5的int类型切片,初始值都为0。

对于映射来说,make函数不需要指定长度和容量,所以我们只需要指定映射的类型即可。上面的代码中,m1是一个空的map[string]int类型映射。

对于通道来说,make函数不需要指定长度和容量,所以我们只需要指定通道的类型即可。上面的代码中,ch是一个int类型的通道。

结论

Golang的new关键字用于创建一个指向新分配零值的指针,而make关键字用于创建特定类型的对象。new关键字适用于基本类型和结构体的指针创建,而make关键字适用于切片、映射和通道等对象的创建。正确地使用new和make关键字可以帮助我们更好地管理内存和创建数据结构,提高程序的效率。

相关推荐