既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
为了更好地理解New
和Make
的差异,让我们通过一些示例代码来深入探讨。
1. New
示例
package main
import "fmt"
type Person struct {
Name string
Age int
}
func main() {
p := New(Person) // 使用New分配内存并返回指向Person类型的零值的指针
fmt.Println(p) // 输出:&{ 0}
}
在上面的示例中,我们使用New
函数创建了一个指向Person
类型的零值的指针。由于Person
结构体的字段类型是非零值,因此这些字段的值将为零值(例如,字符串为空字符串,整数为0)。
2. Make
示例
package main
import "fmt"
import "container/vector" // 导入vector包以使用Make函数创建向量
func main() {
v := Make(vector.Vector, 0, 0) // 使用Make创建并初始化一个向量,初始大小为0,容量为0
fmt.Println(v) // 输出:[]
}
在上面的示例中,我们使用Make
函数创建并初始化了一个向量。由于向量的初始大小和容量都为0,因此它的值为空向量(即长度为0的向量)。但是,请注意,向量的容量将根据需要动态增长。
四、结论与建议
通过以上理论阐述和示例代码,我们可以得出以下结论:
New
函数用于分配内存并返回指向类型的零值的指针。这意味着使用New
创建的对象会被初始化为类型的零值。在需要创建具有默认值的对象时,可以使用New
。例如,对于整数类型,使用Newint
将返回一个指向整数的指针,整数的值为零。Make
函数用于创建并初始化一个或多个对象。与New
不同,Make
会根据类型的初始化规则对对象进行初始化,将其初始化为非零值。因此,当需要创建已经初始化的对象时,可以使用Make
。例如,使用Make
可以创建一个初始大小和容量为0的向量,但实际使用时向量的大小会动态增长。- 在实际编程中,选择使用
New
还是Make
取决于具体的需求。如果只需要创建一个具有默认值的对象,可以使用New
;如果需要创建一个已经初始化的对象或切片,可以使用Make
。同时,也要注意不同类型的对象或切片的初始化规则,以确保正确使用这两个函数。
五、示例:使用New和Make在实践中
让我们通过一个具体的示例来进一步说明New
和Make
在实际编程中的应用。
假设我们正在开发一个电子商务网站,需要在购物车中保存用户的商品列表。我们可以使用切片来存储商品,每个商品是一个结构体实例。
首先,我们定义一个Product
结构体,表示商品:
type Product struct {
ID int
Name string
Price float64
Quantity int
}
接下来,我们使用New
函数创建一个指向Product
类型的零值的指针:
p := New(Product)
然后,我们可以使用该指针创建一个商品对象,并为其字段赋予实际的值:
p.ID = 1
p.Name = "Apple iPhone 13"
p.Price = 999.99
![img](https://img-blog.csdnimg.cn/img_convert/0880e26f0bcc7c557b1d1ff774f7f5fd.png)
![img](https://img-blog.csdnimg.cn/img_convert/72288ccc69cc4685f1758b2f86410879.png)
![img](https://img-blog.csdnimg.cn/img_convert/a251e5eb94b29845e9d0ed45ded8bc12.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**
将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**