c语言编程笔录

首页 >   > 笔记大全

笔记大全

Go语言的make和new实现原理是什么

更新时间:2023-10-12

make和new的概念

在Go语言中,make和new都是用于创建一个新的对象。 但是,两者的实现方式不同,因此也有不同的用途。

make用于创建slices、maps和channels,而new用于创建任何类型的变量并返回其指针。 在本文中,我们将重点讨论make和new的实现方式。

s := make([]int, 3)
m := make(map[string]int)
c := make(chan int)
p := new(int)

new的实现方式

new函数是用于在分配内存后,返回一个类型的指针。 虽然它只是一个函数,但它没有初始化内存,只是返回指向分配内存的指针。

p := new(int)
fmt.Println(*p) // 输出:0

在这个例子中,new函数返回一个指向int类型变量的指针。 这是一个新分配的内存,它还没有被初始化。 然后,*p操作符会查询并输出存储在这个新内存地址中的值。 由于是新分配的内存,因此其默认值为0。

make的实现方式

make函数是用于创建slices、maps和channels的内置函数。 它可以用于在堆上分配内存并初始化其值。

s := make([]int, 3)
m := make(map[string]int)
c := make(chan string)

在这个例子中,我们使用make创建了一个长度为3的整数切片,一个键类型为字符串,值类型为整数的映射,还有一个类型为字符串的channel。 我们不需要在创建这些结构时分配内存,而是由make函数在堆上分配内存空间并进行初始化。

总结

make和new都是创建Go语言中不同类型的变量的方法。 new用于创建任何类型的变量,并返回其指针,而make则用于创建slice、map和channel,并初始化它们的值。 正确使用这些函数可以使Go程序更加高效和灵活。

总之,make和new在Go语言中是非常重要的函数,因为它们是用于创建不同类型的变量的方法。 虽然它们的实现方式不同,但它们的主要目的都是在程序中分配内存和创建新的对象。 具有深入理解这些函数的能力可以帮助程序员更好地理解Go语言的内存管理机制并编写出高效的代码。