Go语言 make 和 new 创建
在Go语言中,我们可以使用 make
和 new
关键字来创建对象。这两个关键字的作用有所不同,我们需要根据具体的需求来选择使用。
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
。然后,我们通过 len
和 cap
函数来获取切片的长度和容量,并将其打印出来。
运行上述代码,输出结果如下:
长度: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 的区别
make
和 new
的区别主要有以下几点:
make
用于创建引用类型的数据结构,返回的是该数据结构的引用。而new
用于创建值类型的数据结构,返回的是指向该数据结构的指针。make
必须指定数据结构的大小或容量,而new
不需要。make
返回初始化后的数据结构,而new
返回一个指向零值的指针。
根据具体的需求,我们可以选择使用 make
或 new
来创建对象。
序列图
下面是一个使用 make
和 new
创建对象的序列图:
sequenceDiagram
participant Main
participant Make
participant New
Main->>Make: 使用 make 创建对象
Make->>Make: 初始化对象
Make-->>Main: 返回对象引用
Main->>New: 使用 new 创建对象
New->>New: 初始化对象
New-->>Main: 返回对象指针
序列图展示了使用 make
和 new
创建对象的过程。首先,主程序调用 make
或 new
来创建对象;然后,make
或 new
在内部初始化对象,并将其返回给主程序。
总结
在本文中,我们介绍了使用 make
和 new
关键字来创建对象的方法。通过 make
,我们可以创建引用类型的数据结构;而通过 new
,我们可以创建值类型的数据结构。根据具体的需求,我们可以选择使用 make
或 new
来创建对象。希望本文能够帮助你更好地理解和使用 make
和 new
关键字。