go语言中的ew函数介绍

news/2025/1/22 23:37:42/文章来源:https://www.cnblogs.com/honghu0420/p/18686957

在 Go 语言中,new 是一个内建函数,用于分配内存并返回一个指向新分配的零值的指针。其主要作用是创建一个类型为 T 的新变量,并初始化为该类型的零值,返回指向这个变量的指针。它的语法和基本使用方法如下:

new 函数的基本语法

new(T)
  • T 是你想要创建的新变量的类型。
  • new(T) 返回的是一个类型为 *T 的指针,指向该类型的零值。

返回值

new 函数返回的是指向类型 T 零值的指针。注意,这个指针指向的内存已经被分配,并且其值被初始化为该类型的零值。

例如,new(int) 会返回一个指向零值 0*int 类型指针;new(string) 会返回一个指向零值空字符串 ""*string 类型指针。

示例

package mainimport "fmt"func main() {// 使用 new 创建一个 int 类型的指针,指向 0ptr := new(int)// 输出指针 ptr 所指向的值,应该是 0fmt.Println(*ptr) // 0// 修改 ptr 所指向的值*ptr = 42// 输出修改后的值fmt.Println(*ptr) // 42// 使用 new 创建一个 string 类型的指针,指向空字符串 ""strPtr := new(string)// 输出指针 strPtr 所指向的值,应该是 ""fmt.Println(*strPtr) // ""
}

newmake 的区别

在 Go 语言中,newmake 都用于分配内存,但它们有显著的区别:

  • new(T):返回一个类型为 *T 的指针,并将内存初始化为该类型的零值。
  • make(T, ...):用于创建切片(slice)、映射(map)和通道(channel)等引用类型,并初始化它们的内部结构。make 返回的是该引用类型本身,而不是指向它的指针。

示例:newmake 对比

package mainimport "fmt"func main() {// 使用 new 创建 int 类型指针,指向 0ptr := new(int)fmt.Println(*ptr) // 0// 使用 make 创建一个切片并初始化slice := make([]int, 5)fmt.Println(slice) // [0 0 0 0 0]
}

在这个例子中,new(int) 返回的是一个指向 int 类型零值的指针,而 make([]int, 5) 创建了一个包含 5 个元素的整数切片。

总结

  • new(T) 用于为类型 T 分配内存,并返回一个指向该内存区域的指针,指针指向该类型的零值。
  • new 是一个简便的内存分配工具,通常用于创建简单类型的指针。
  • newmake 都用于内存分配,但 make 主要用于初始化引用类型(如切片、映射和通道),并返回的是类型本身,而非指针。

通过 new,你可以轻松地为各种类型创建零值并获取它们的指针,这在一些场景中(如动态分配内存)非常有用。

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

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

相关文章

Tomcat 高并发之道原理拆解与性能调优

上帝视角拆解 Tomcat 架构设计,在了解整个组件设计思路之后。我们需要下凡深入了解每个组件的细节实现。从远到近,架构给人以宏观思维,细节展现饱满的美。 上回👉详情点我【Tomcat】Tomcat 架构原理解析到架构设计借鉴 站在上帝视角给大家拆解了 Tomcat 架构设计,分析 To…

Vue3 —— 安装及配置环境

Vue3的安装、配置(✿◕‿◕✿)Vue官网:https://vuejs.org/配置环境终端:Linux和Mac上可以用自带的终端。Windows上推荐用powershell或者cmd。Git Bash有些指令不兼容。安装Node.js:安装地址:https://nodejs.org/en/安装@vue/cli:执行:npm i -g @vue/cli如果执行后面的操作…

二. Redis 超详细的安装教程((七步)一步一步指导,步步附有截屏操作步骤)

二. Redis 超详细的安装教程((七步)一步一步指导,步步附有截屏操作步骤) @目录二. Redis 超详细的安装教程((七步)一步一步指导,步步附有截屏操作步骤)1. Redis 详细安装教程2. Redis 后台基本启动 & 详细的基本使用3. Redis 服务器的关闭和启动的注意事项4. 如何修改 Re…

数据分库分表和迁移方案

在我们业务快速发展的过程中,数据量必然也会迎来突飞猛涨。那么当我们的数据量百倍、千倍、万倍、亿倍增长后,原有的单表性能就不能满足我们日常的查询和写入了,此时数据架构就不得不进行拆分,比如单表拆分成10张表、100张表、单个月分多张表等等。下面我们针对具体案例分析…

Power BI 连接GaussDB提取数据方法

Power BI本身没有直接的链接器来获取GaussDB,目前连接GaussDB的方法有2个: ODBC, JDBC,这两种方式在云端都要通过设置网关,pbi云端通过网关链接到虚拟机或者某台电脑上,电脑安装个人网关(组织网关没有成功,不知道为什么,知道原因的希望能留言),下面说下两种连接方式: …

2025-1-20-盒子模型-弹性盒子模型

重新学一下巩固,之前发的看不了,本来还想着直接看呢 盒子模型 width,height是宽高,padding是内边距,如果里边有文本的话一般是贴着左上方,但是有内边距就不会,类似下边的演示图;border是内外之间边框,就是给宽高之外加一层;margin是外边距,可以理解为是你构造的边框…

【Ubuntu】安装OpenSSH启用远程连接

【Ubuntu】安装OpenSSH启用远程连接 零、安装软件 使用如下代码安装OpenSSH服务端: sudo apt install openssh-server壹、启动服务 使用如下代码启动OpenSSH服务端: sudo systemctl start ssh贰、配置SSH(可跳过) 配置文件 OpenSSH的配置文件所在位置:/etc/ssh/sshd_confi…

CTF-web第二步!

菜狗杯web的传说之下。打开F12,发现有个Game=new Underophidian(gameCanvas)表明有个Game变量存储着数据。在控制台输入Game获取,根据题意,修改分数,然后玩一下就可以得到flag了。

【CodeForces训练记录】Codeforces Round 1000 (Div. 2)

训练情况赛后反思 C题猜了个假结论WA4,每次选择度最多的删掉,在连续三个度都是最大的情况下,删中间的会寄 A题 有点前缀和的感觉,\([1,l]\) 互质个数为 \(l\),\([1,r]\) 互质个数为 \(r\),所以区间 \([l,r]\) 的个数就是 \(r-l\),特判一下 \(l=1,r=1\) 的情况答案是 \(1\…

GUIClip在IMGUI中的作用

目录简介IMGUIGUIClipPush Pop Count局部坐标StyleDraw中Rect点的位置鼠标位置绝对坐标ScrollOffset对局部坐标的影响局部坐标和绝对坐标的相互转化裁剪参考链接 简介 Unity中的IMGUI是一个独立于ugui的UI系统。IMGUI是事件(消息)驱动的UI系统,主要用于编写开发工具。 Unity官…

ceph-安装

【os】 ubuntu1804 【文心上找到的】 【步骤】一、环境准备‌配置节点名称‌:配置集群各节点的hostname,确保互相可以通过hostname来解析节点IP,不需要通过DNS。 ‌时间同步‌:确保所有节点的时间同步,以避免时间不一致导致的问题。 ‌关闭防火墙和SELinux‌:为了简化安装…

开源项目芋道源码解析 [开篇]

文章首发于我的博客:https://blog.liuzijian.com/post/source-code-about-ruoyi-vue-pro.html 1.引言 芋道(又名yudao,ruoyi-vue-pro)是一个基于spring-boot框架的单体Java后端开源项目,拥有基于RBAC模型的组织架构管理、CRM、ERP、商城、代码生成、AI等多个功能模块。封装了…