Go语言中的make和new:内存分配与对象创建的巧妙之道

Go语言中的make和new:内存分配与对象创建的巧妙之道

Go语言作为一门简洁而强大的编程语言,提供了多种用于动态内存分配和对象创建的关键词。其中,make和new是两个常见且常被混淆的关键词。本文将深入讲解Go语言中make和new的区别,解析它们的用途和适用场景,帮助开发者更好地理解和运用这两个关键词。

make关键词

  1. make的作用:make用于创建引用类型(切片、映射和通道)的实例,并进行初始化。它会分配内存空间,并返回一个初始化后的实例。
  2. make的语法:使用make的语法为:make(T, args...),其中T代表切片、映射或通道的类型,args表示相应类型的初始化参数。
  3. make的适用场景
    • 切片:使用make创建切片时,会分配底层数组并初始化切片的长度和容量。
    • 映射:使用make创建映射时,会分配并初始化一个空的映射。
    • 通道:使用make创建通道时,会分配并初始化一个通道。

Snipaste_2024-03-15_10-12-15

new关键词

  1. new的作用:new用于创建值类型的实例,并返回指向该实例的指针。它会分配零值初始化的内存,并返回指向该内存的指针。
  2. new的语法:使用new的语法为:new(T),其中T代表值类型的名称。
  3. new的适用场景:
    • 结构体:使用new创建结构体时,会分配并返回指向零值初始化的结构体实例的指针。

Snipaste_2024-03-15_10-12-24

make和new的区别与选择

  • 返回类型:make返回的是引用类型的实例,而new返回的是指向值类型实例的指针。
  • 初始化:make会对引用类型进行初始化,而new只会进行零值初始化。
  • 内存分配:make会分配并初始化内存,而new只会分配内存。
  • 选择方法:根据实际需求选择合适的关键词。如果需要初始化引用类型的实例,使用make;如果只需要分配值类型实例的内存,使用new。

最佳实践与注意事项

  • 引用类型的实例通常需要使用make进行初始化,确保其内部结构得到正确的初始化。
  • 值类型的实例使用new进行内存分配,然后根据需要进行赋值操作。
  • 注意对返回的引用类型实例和值类型指针进行空值检查,以避免空指针引发的错误。

总结

make和new是Go语言中用于动态内存分配和对象创建的关键词。make适用于创建引用类型的实例并进行初始化,而new适用于分配值类型实例的内存。根据实际需求选择合适的关键词,可以更好地管理内存和对象创建,提高代码的可读性和可维护性。通过合理运用make和new,我们可以更好地发挥Go语言的优势,编写高效、可靠的代码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/748564.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python来判断密码强弱-类

设计者:ISDF 版本:v1.0 日期:2019/4/3设计者:ISDF 版本:v2.0 日期:2024/4/3 class PasswordTool:密码工具类def __init__(self,password):#类的属性self.password passwordself.stregth_level 0def check…

考研C语言复习进阶(5)

目录 1. 为什么使用文件 2. 什么是文件 2.1 程序文件 2.2 数据文件 2.3 文件名 3. 文件的打开和关闭 3.1 文件指针 3.2 文件的打开和关闭 4. 文件的顺序读写 ​编辑 ​编辑 4.1 对比一组函数: ​编辑 5. 文件的随机读写 5.1 fseek 5.2 ftell 5.3 rewind…

【C语言】linux内核pci_save_state

一、中文注释 //include\linux\pci.h /* 电源管理相关的例程 */ int pci_save_state(struct pci_dev *dev);//drivers\pci\pci.c /*** pci_save_state - 在挂起前保存PCI设备的配置空间* dev: - 我们正在处理的PCI设备*/ int pci_save_state(struct pci_dev *dev) {int i;/* X…

谷歌网络营销方案有几种?​

谷歌作为海外的头部工具,本身其实就有多种工具可以供你使用,在这里说说谷歌那些工具 Google My Business,对于小企业或者本地服务来说,把自己的业务信息优化并完善在Google My Business上是个不错的选择。这样当人们在附近搜索相…

微信小程序云开发教程——墨刀原型工具入门(表单组件)

引言 作为一个小白,小北要怎么在短时间内快速学会微信小程序原型设计? “时间紧,任务重”,这意味着学习时必须把握微信小程序原型设计中的重点、难点,而非面面俱到。 要在短时间内理解、掌握一个工具的使用&#xf…

【NC223888】红色和紫色

题目 红色和紫色 博弈论,想得出来思路就简单,想不出来就难。一般使用猜测法。 思路 如果小红随意取一个格子涂色,那么小紫怎么涂色才是她的最优选择呢? 假设小紫只能选择小红涂色的格子的相邻格子或者是最近斜对角的一个格子涂色…

LeetCode 2684.矩阵中移动的最大次数:一列一列处理,只记能到哪行(BFS)

【LetMeFly】2684.矩阵中移动的最大次数:一列一列处理,只记能到哪行(BFS) 力扣题目链接:https://leetcode.cn/problems/maximum-number-of-moves-in-a-grid/ 给你一个下标从 0 开始、大小为 m x n 的矩阵 grid ,矩阵由若干 正 整…

【漏洞复现】大华智慧园区综合管理平台SQL注入漏洞

Nx01 产品简介 大华智慧园区综合管理平台是一款综合管理平台,具备园区运营、资源调配和智能服务等功能。该平台旨在协助优化园区资源分配,满足多元化的管理需求,同时通过提供智能服务,增强使用体验。 Nx02 漏洞描述 大华智慧园区…

Halcon图像预处理、阈值分割

1、blob(Binary Large Object)是指二值图像中连通区域。 预处理通常包括一系列步骤,例如去噪、形态学操作、特征提取等。 read_image(Image,claudia) get_image_size(Image,Width,Height) dev_open_window_fit_size (0, 0, Width, Width, -1,…

如何在iPhone上恢复已删除的微信聊天记录?

你好,我前几天删除了微信聊天记录。有什么办法可以恢复iPhone上已删除的微信聊天记录吗? 有些人每次使用设备时都会遇到在 iPhone 上丢失消息的风险。特别是,由于多种因素,可能会丢失第三方数据,微信消息也是如此。微…

2024Vue高频面试题

前言: Vue 在前端开发领域拥有强劲的发展势头,以下是一些 Vue 的发展趋势: 1.持续增长的用户数量: Vue 作为一款轻量级、易学易用的前端框架,吸引了越来越多的开发者和企业选择使用。其活跃的社区和丰富的资源也促进了用户数量的不断增长。 2.生态系统不断丰富: 随着 V…

远超预期,特效吹爆!《武庚纪》:建议漫改都按这个标准来!

作为《武庚纪》动画党,听闻要改编成真人电视剧时,最害怕的无非五毛钱特效,流水线仙侠,无脑古偶。但在看过《烈焰》(原名:武庚纪)之后,不得不感叹一句:“倒也不用这么还原…

【计算机网络篇】计算机网络的性能指标

文章目录 🍔计算机网络的性能指标🗃️常见的计算机网络性能指标⭐速率⭐带宽⭐吞吐量⭐时延⭐时延带宽积⭐往返时间⭐利用率⭐丢包率 🔎总结 🍔计算机网络的性能指标 计算机网络的性能指标被用来从不同方面度量计算机网络的性能 …

算法的渐进时间复杂度

T(n) = O(F(n)) T(n):Time 渐进时间复杂度 O:正比例关系 F(n):代码执行次数 只要代码执行的次数越来越多 所耗费的时间也就越来越高 常见的5种: O(n^2) O(n logn) O(n) O(logn) O(1):不管重复多少次1次也是这个时间,10次也是这个时间。 时间复杂度排序:由小到…

JAVA22 FFM实战之HelloWorld

前言 JDK22即将发布,Java Foreign Function & Memory API将会退出预览,是时候开始学习一波了。 FFM API介绍 FFM API由两大部分组成,一个是Foreign Function Interface,另一个是Memory API。前者是外部函数接口&#xff0c…

对模型性能进行评估(Machine Learning 研习十五)

在上一篇我们已然训练了一个用于对数字图像识别的模型,但我们目前还不知道该模型在识别数字图像效率如何?所以,本文将对该模型进行评估。 使用交叉验证衡量准确性 评估模型的一个好方法是使用交叉验证,让我们使用cross_val_score…

机器学习-04-分类算法-02贝叶斯算法

总结 本系列是机器学习课程的系列课程,主要介绍机器学习中分类算法,本篇为分类算法与贝叶斯算法部分。 本门课程的目标 完成一个特定行业的算法应用全过程: 懂业务会选择合适的算法数据处理算法训练算法调优算法融合 算法评估持续调优工程…

MySQL大小写敏感、MySQL设置字段大小写敏感

文章目录 一、MySQL大小写敏感规则二、设置数据库及表名大小写敏感2.1、查询库名及表名是否大小写敏感2.2、修改库名及表名大小写敏感 三、MySQL列名大小写不敏感四、lower_case_table_name与校对规则4.1、验证校对规则影响大小写敏感4.1、验证校对规则影响排序 五、设置字段内…

Selenium控制已运行的Edge和Chrome浏览器——在线控制 | 人机交互(详细启动步骤和bug记录)

文章目录 前期准备1. 浏览器开启远程控制指令(1)Edge(2)Chrome 2. 执行python代码(1)先启动浏览器后执行代码(2)通过代码启动浏览器(3)Bug问题记录1&#xff…

蓝桥杯决赛2023 RE CyberChef2

思路很清晰,爆IV 但是题目出的有点屎,六位字符串,62的6次方,要我爆到猴年马月? 就当练习脚本吧 #Cyber2 wp from Crypto.Cipher import DES, AES from Crypto.Util.Padding import pad, unpad key_des b0a0b0c0…