Go(或 Golang)是一种现代、静态类型、编译型的编程语言,专为构建可扩展、并发和高效的软件而设计。它提供了各种内置的函数和特性,帮助开发人员编写简洁高效的代码。其中包括 new() 和 make() 函数,这两个函数乍看起来可能相似,但在 Go 中用于不同的目的,对于内存分配和数据初始化至关重要。
班玛ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为创新互联的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:18980820575(备注:SSL证书合作)期待与您的合作!
在本博客文章中,我们将探讨 new() 和 make() 函数之间的区别,了解何时以及如何有效地使用它们。
new() 和 make() 都是 Go 中的内置函数,用于分配内存。然而,它们用于不同的数据类型和场景:
new() 函数:
make() 函数:
new() 函数的语法非常简单,如下所示:
func new(Type) *Type
这里的 Type 表示我们想要为其分配内存的值的类型。让我们看一个如何使用 new() 的示例。
在这个示例中,我们使用 new() 创建了 Person 结构体的一个新实例,然后使用指针分配值给其字段。
package main
import "fmt"
type Person struct {
Name string
Age int
}
func main() {
// Using new() to allocate memory for a Person struct
p := new(Person)
fmt.Printf("%T\n", p)
// Accessing struct fields using the pointer
p.Name = "Alice"
p.Age = 30
// Displaying the values
fmt.Println("Name:", p.Name)
fmt.Println("Age:", p.Age)
}
这个程序将产生如下所示的输出。
> go run main.go
*main.Person
Name: Alice
Age: 30
make() 函数的语法取决于它所用于的类型。
(1) 对于切片(Slices)
func make([]Type, len, cap) []Type
使用 make() 创建切片的示例:
package main
import "fmt"
func main() {
// Using make() to create a slice of integers
numbers := make([]int, 5, 10)
// Displaying the slice's length, capacity, and values
fmt.Println("Length:", len(numbers))
fmt.Println("Capacity:", cap(numbers))
fmt.Println("Values:", numbers)
// Using make() to create a slice of integers
numbersWithoutOptional := make([]int, 5)
// Displaying the slice's length, capacity, and values
fmt.Println("Length:", len(numbersWithoutOptional))
fmt.Println("Capacity:", cap(numbersWithoutOptional))
fmt.Println("Values:", numbersWithoutOptional)
}
此程序将产生如下输出:
> go run main.go
Length: 5
Capacity: 10
Values: [0 0 0 0 0]
Length: 5
Capacity: 5
Values: [0 0 0 0 0]
(2) 对于映射(Maps)
func make(map[KeyType]ValueType, initialCapacity int) map[KeyType]ValueType
使用 make() 创建映射的示例:
package main
import "fmt"
func main() {
// Using make() to create a map of string keys and int values
scores := make(map[string]int)
// Adding values to the map
scores["Alice"] = 95
scores["Bob"] = 87
// Displaying the map
fmt.Println("Scores:", scores)
}
> go run main.go
Scores: map[Alice:95 Bob:87]
(3) 对于通道(Channels)
func make(chan Type, capacity int) chan Type
使用 make() 创建通道的示例:
package main
import (
"fmt"
"time"
)
func main() {
// Using make() to create an unbuffered channel of integers
ch := make(chan int)
// Sending data into the channel using a goroutine
go func() {
for i := 1; i <= 5; i++ {
ch <- i
time.Sleep(time.Second) // Simulating some work before sending the next value
}
close(ch)
}()
// Receiving data from the channel
for num := range ch {
fmt.Println("Received:", num)
}
}
> go run main.go
Received: 1
Received: 2
Received: 3
Received: 4
Received: 5
在本博客文章中,我们解开了 Go 中的 new() 和 make() 函数的谜团,并解释了它们的区别和用途。总结一下:
理解 new() 和 make() 之间的区别对于在 Go 中进行高效的内存分配和数据初始化至关重要。正确使用这些函数将在您的 Golang 项目中产生更干净和更优化的代码。愿您编程愉快!
本文标题:揭秘Go中的new()和make()函数
网站URL:http://www.shufengxianlan.com/qtweb/news11/123161.html
网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联