解释'制造”和'新事物”之间的区别。你什么时候使用?
解释“制造”和“新事物”之间的区别。你什么时候使用?
在Go, make
和new
都用于内存分配,但它们具有不同的目的,并且用于不同类型。
-
新:
new
功能为给定类型分配内存,并返回指向该内存的指针。该类型的内存初始化为零值。new
类型都与任何类型一起使用,包括内置类型,结构和自定义类型。它将类型*T
的指针返回到新分配的零存储中,用于新的T
型。例如:<code class="go">p := new(int) // p, of type *int, points to an unnamed int variable fmt.Println(*p) // prints 0</code>
登录后复制当您需要一个指针以零类型的零值时,尤其是当您使用结构或其他复合类型时,您需要使用
new
。 -
Make :
make
功能仅与内置类型slice
,map
和channel
一起使用。与new
不同,make
这些类型初始化为非零值。它返回准备使用的T
型(非*T
)的初始化(非零)值。例如:<code class="go">s := make([]int, 5) // s is a slice of ints, length 5, capacity 5 m := make(map[string]int) // m is a map of strings to ints c := make(chan int) // c is a channel of ints</code>
登录后复制初始化切片,地图或频道时,您将使用
make
。这些类型需要特殊的初始化,不仅分配为零值。
在GO中,最好将哪些类型的数据结构使用“ Make”初始化?
在GO中, make
功能是专门设计用于初始化以下三个数据结构的设计:
-
切片:切片是动态阵列,大小可以生长或收缩。当您使用切片
make
时,您可以指定长度并选择容量。这将其元素零值的切片初始化。<code class="go">mySlice := make([]int, 5, 10) // length 5, capacity 10</code>
登录后复制 -
地图:地图是钥匙值对,键是唯一的。使用
make
用地图初始化一个空的地图,准备存储键值对。<code class="go">myMap := make(map[string]int)</code>
登录后复制 -
频道:频道是您可以通过频道操作员
发送和接收值的导管。使用<code>make
With a频道初始化一个空通道,该通道可用于在goroutines之间进行通信。<code class="go">myChannel := make(chan int)</code>
登录后复制
记忆分配在GO中的“制造”和“新”之间有何不同?
GO中的内存分配在以下方式之间与make
和new
不同:
-
新:当您使用
new
时,请GO分配您指定的类型的内存,并返回指向该内存的指针。内存初始化为指定类型的零值。new
基本上执行简单的内存分配,而没有设置零值之外的任何其他初始化。它是通用的,可与任何类型一起使用。<code class="go">p := new(int) // allocates memory and returns a pointer to zeroed int</code>
登录后复制 -
制作:当您使用
make
时,不仅要分配内存,还可以初始化数据结构。对于切片,make
分配指定长度和容量的基础阵列,并以零值初始化切片。对于地图和频道,make
执行必要的内部初始化以使其准备使用。仅与切片,地图和频道一起make
。<code class="go">s := make([]int, 5) // allocates memory for a slice and initializes it</code>
登录后复制
总而言之, new
分配内存并将指针返回到零存储的指针,而make
内存分配并将指定的数据结构(切片,地图或渠道)初始化为现成的状态。
在哪些情况下,“新”可能比“做”更合适?
new
可能make
以下情况更合适:
-
使用自定义类型或结构时:如果您要定义自定义类型或结构,并且需要指向该类型的零实例的指针,
new
是适当的选择。这通常对于在填充其字段之前初始化对象通常很有用。<code class="go">type Person struct { Name string Age int } p := new(Person) // p is of type *Person, points to zeroed Person struct p.Name = "Alice" p.Age = 30</code>
登录后复制 -
当您需要指向任何类型的指针时:如果您需要指向
int
,float64
等基本类型的指针,或者是要零值的自定义类型,new
是合适的。在您直接使用指针的情况下,这可能很有用。<code class="go">pi := new(int) // pi is of type *int, points to zeroed int *pi = 42</code>
登录后复制 -
为了有效的零值初始化:当您想为类型有效分配和零量化内存时,而没有其他设置的开销,而其他设置
make
以为切片,地图和频道执行性能,new
更合适的是。<code class="go">zeroInt := new(int) // Efficient way to get a zeroed int pointer</code>
登录后复制 -
为了与较旧的代码或库的兼容:在某些情况下,较旧的GO代码或库可能期望指示类型,而
new
可以用来满足这些期望。
总而言之,当您需要指针的任何类型的零值时,尤其是在使用自定义类型,结构或基本类型的零值时, new
是更合适的。
以上是解释'制造”和'新事物”之间的区别。你什么时候使用?的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

OpenSSL,作为广泛应用于安全通信的开源库,提供了加密算法、密钥和证书管理等功能。然而,其历史版本中存在一些已知安全漏洞,其中一些危害极大。本文将重点介绍Debian系统中OpenSSL的常见漏洞及应对措施。DebianOpenSSL已知漏洞:OpenSSL曾出现过多个严重漏洞,例如:心脏出血漏洞(CVE-2014-0160):该漏洞影响OpenSSL1.0.1至1.0.1f以及1.0.2至1.0.2beta版本。攻击者可利用此漏洞未经授权读取服务器上的敏感信息,包括加密密钥等。

在BeegoORM框架下,如何指定模型关联的数据库?许多Beego项目需要同时操作多个数据库。当使用Beego...

后端学习路径:从前端转型到后端的探索之旅作为一名从前端开发转型的后端初学者,你已经有了nodejs的基础,...

Go语言中使用RedisStream实现消息队列时类型转换问题在使用Go语言与Redis...

GoLand中自定义结构体标签不显示怎么办?在使用GoLand进行Go语言开发时,很多开发者会遇到自定义结构体标签在�...

Go语言中用于浮点数运算的库介绍在Go语言(也称为Golang)中,进行浮点数的加减乘除运算时,如何确保精度是�...

Go爬虫Colly中的Queue线程问题探讨在使用Go语言的Colly爬虫库时,开发者常常会遇到关于线程和请求队列的问题。�...

本文介绍如何在Debian系统上配置MongoDB实现自动扩容,主要步骤包括MongoDB副本集的设置和磁盘空间监控。一、MongoDB安装首先,确保已在Debian系统上安装MongoDB。使用以下命令安装:sudoaptupdatesudoaptinstall-ymongodb-org二、配置MongoDB副本集MongoDB副本集确保高可用性和数据冗余,是实现自动扩容的基础。启动MongoDB服务:sudosystemctlstartmongodsudosys
