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()