Go语言new和make的使用区别和优异实践?
一、new关键字的使用
new是Go语言的内建函数,用于为值类型和引用类型分配内存空间并返回指向该内存空间的指针。它的使用格式为:
new(Type)
其中Type是所需对象的类型。new函数返回的是指向该对象的指针。
1、值类型的创建
对于值类型的对象,使用new关键字会分配一块内存,并返回指向该内存的指针。下面是一个示例:
type Person struct { Name string Age int}func main() { p := new(Person) p.Name = "John" p.Age = 25 fmt.Println(p) // 输出:&{John 25}}
在上面的示例中,通过new关键字创建了一个Person对象,并对其进行了赋值操作。
2、引用类型的创建
对于引用类型的对象(如切片、映射和通道),new关键字并不直接适用。对于引用类型的对象,我们需要使用make关键字进行创建。下面将详细介绍make的使用。
二、make关键字的使用
make是Go语言的内建函数,主要用于创建引用类型的对象。它的使用格式为:
make(Type, size)
其中Type是所需对象的类型,size是用于初始化该对象的参数。
1、切片的创建
切片是Go语言中常用的引用类型,我们可以使用make关键字创建一个切片对象。下面是一个示例:
func main() { s := make([]int, 5, 10) fmt.Println(s) // 输出:[0 0 0 0 0] fmt.Println(len(s)) // 输出:5 fmt.Println(cap(s)) // 输出:10}
在上面的示例中,使用make关键字创建了一个初始长度为5,容量为10的整型切片。
2、映射的创建
映射也是引用类型的一种,我们同样可以使用make关键字创建一个映射对象。下面是一个示例:
func main() { m := make(map[string]int) m["apple"] = 1 m["banana"] = 2 fmt.Println(m) // 输出:map[apple:1 banana:2]}
在上面的示例中,使用make关键字创建了一个空的字符串到整数的映射,并对其进行了赋值操作。
3、通道的创建
通道是Go语言中用于协程之间通信的重要机制,同样可以使用make关键字创建通道对象。下面是一个示例:
func main() { ch := make(chan int) go func() { ch <- 42 }() result := <-ch fmt.Println(result) // 输出:42}
在上面的示例中,使用make关键字创建了一个整型通道,并通过协程向通道发送了一个值,并从通道中接收到该值。
三、new和make的优异实践
在使用new和make时,我们需要根据对象的类型和需求来选择合适的关键字。下面是一些优异实践的建议:
1、使用new关键字
当需要创建一个值类型的对象时,可以使用new关键字,它会为对象分配内存并返回指向该内存的指针。注意,在使用new关键字创建的对象后,需要手动对其进行赋值操作。2、使用make关键字
当需要创建引用类型的对象(如切片、映射和通道)时,应使用make关键字。make关键字会进行初始化,并返回对应类型的对象。对于切片,应指定初始长度和容量。对于映射和通道,可以省略参数或根据实际需求指定参数。3、确保初始化
无论是使用new还是make,都要确保对对象进行适当的初始化操作。避免使用未初始化的对象,以免造成未定义的行为或错误结果。在Go语言中,new和make是两个常用的关键字,用于在程序中创建对象。通过合理使用new和make,我们可以更好地管理和操作Go语言中的对象,提高程序的性能和可维护性。
延伸阅读1:Go语言的使用建议有哪些
Go语言(也称为Golang)是一种由Google开发的编程语言,以下是一些使用建议:
一、学习Go语言的基础知识
在开始使用Go语言之前,建议学习其基本语法、数据类型、函数、并发模型等基础知识。掌握这些基础知识对于理解和正确使用Go语言至关重要。
二、使用标准库和第三方库
Go语言提供了丰富的标准库,涵盖了各种常用功能。熟悉并合理利用标准库可以提高开发效率。此外,Go社区也有很多优异的第三方库和工具,可以帮助解决特定的问题,节省开发时间。
三、理解并发模型
Go语言以其强大的并发支持而闻名。了解Goroutines和Channels的概念以及如何正确使用它们,可以帮助您编写高效、并发安全的代码。并发编程是Go语言的一个重要特性,合理利用并发可以提高程序的性能和响应能力。
四、使用Go工具链
Go语言提供了一套强大的工具链,包括编译器、测试工具、性能分析工具等。熟悉并合理使用这些工具可以简化开发流程,提高代码质量和性能。
五、编写清晰可读的代码
Go语言强调代码的简洁和可读性。编写清晰、易于理解的代码可以提高代码的可维护性和协作效率。遵循Go语言的命名约定和代码风格,注重代码的可读性。
六、进行单元测试
Go语言鼓励进行单元测试,通过编写测试用例来验证代码的正确性。编写全面的单元测试可以帮助您捕获潜在的问题并提高代码的质量。
七、关注性能优化
Go语言在性能方面表现出色,但在某些情况下可能需要进行性能优化。了解性能优化的技巧和工具,可以帮助您发现和解决潜在的性能瓶颈。
八、参与Go社区
Go语言拥有一个活跃的社区,有很多资源和社区活动可以帮助您学习和提高。参与讨论、阅读优异的开源代码、贡献自己的代码,可以帮助您更好地理解和使用Go语言。

相关推荐HOT
更多>>
在 iPad 上运行 Windows 是什么体验?
一、在 iPad 上运行 Windows 是什么体验目前市面上有一些能够在 iPad 上运行 Windows 的应用程序,例如 Parallels Access、Splash较好、VMware ...详情>>
2023-10-14 19:14:27
vector, list, map等容器使用场合是什么?
一、vector, list, map等容器使用场合vector适用于对象简单,变化较小,并且频繁随机访问的场景。list适用经常进行插入和删除并且不经常随机访...详情>>
2023-10-14 14:59:11
分库分表的数据库和分布式数据库有什么区别?
一、分库分表的数据库和分布式数据库有什么区别分库分表的数据库:没有这种数据库,所谓分库分表,这是开发应用的程序员通过自己的代码、或者底...详情>>
2023-10-14 13:59:18
APP定制开发的难点有哪些?
一、APP定制开发的难点1、多平台适配不同的移动平台(如iOS和Android)具有不同的操作系统、开发语言和开发工具。在进行APP定制开发时,需要适...详情>>
2023-10-14 12:57:35