【Golang 面试题】每日 3 题(五)

devtools/2024/12/28 23:50:55/

✍个人博客:Pandaconda-CSDN博客
📣专栏地址:http://t.csdnimg.cn/UWz06
📚专栏简介:在这个专栏中,我将会分享 Golang 面试中常见的面试题给大家~
❤️如果有收获的话,欢迎点赞👍收藏📁,您的支持就是我创作的最大动力💪

13. Go 语言当中 new 的作用是什么?

在 Go 语言中,new 是一个内置函数,用于创建一个新的零值变量并返回该变量的指针。new 的语法如下:

go">new(T)

其中,T 表示要创建的变量类型。new 返回一个指向新变量的指针,该变量的值为其类型的零值。在 Go 语言中,每个变量都有一个类型和一个值,而 new 可以用于创建变量的指针。

new 的作用在于在堆上分配内存空间,而不是在栈上分配。使用 new 函数创建变量时,返回的指针指向在堆上分配的变量,即使该变量在函数调用结束后仍然存在。因此,new 通常用于创建结构体、数组和其他复杂数据类型的指针。

需要注意的是,new 只能创建变量的指针,而不能用于创建变量本身。如果需要创建变量本身,可以使用变量声明语句,如下所示:

go">var x T

其中,T 表示变量类型,x 是变量名。

14. Go 语言中 make 的作用是什么?

在 Go 语言中,make 是一个内置函数,用于创建一些特定类型的数据结构,如 slice、map 和 channel 等。make 的语法如下:

go">make(T, args...)

其中,T 表示要创建的数据结构的类型,args 表示该数据结构的初始化参数,如长度、容量等。具体来说,

make 的作用如下:

  1. 创建 slice:make([]T, length, capacity),其中 T 表示 slice 的元素类型,length 表示 slice 的长度,capacity 表示 slice 的容量。
  2. 创建 map:make(map[T]U, capacity),其中 T 表示 map 的键类型,U 表示 map 的值类型,capacity 表示 map 的容量。
  3. 创建 channel:make(chan T, capacity),其中 T 表示 channel 中元素的类型,capacity 表示 channel 的缓冲区大小,如果 capacity 为 0,则表示该 channel 是无缓冲的。

需要注意的是,使用 make 函数创建的数据结构是分配在堆上的,并返回一个引用,即一个指向数据结构的指针。这与使用 new 函数创建变量的方式不同,因为 new 只分配了变量所需的内存空间,而 make 分配了变量所需的内存空间,并初始化了变量的其他属性。因此,make 更适用于创建 slice、map 和 channel 等复杂的数据结构。

15. Go 内置函数 make 和 new 的区别?

首先纠正下 make 和 new 是内置函数,不是关键字。

变量初始化,一般包括 2 步,变量声明 + 变量内存分配,var 关键字就是用来声明变量的,new 和 make 函数主要是用来分配内存的。

var 声明值类型的变量时,系统会默认为他分配内存空间,并赋该类型的零值。

比如布尔、数字、字符串、结构体。

如果指针类型或者引用类型的变量,系统不会为它分配内存,默认就是 nil。此时如果你想直接使用,那么系统会抛异常,必须进行内存分配后,才能使用。

new 和 make 两个内置函数,主要用来分配内存空间,有了内存,变量就能使用了,主要有以下 2 点区别:

  1. 使用场景区别
  • make 只能用来分配及初始化类型为 slice、map、chan 的数据。
  • new 可以分配任意类型的数据,并且置零。
  1. 返回值区别
  • make 函数原型如下,返回的是 slice、map、chan 类型本身。
    这 3 种类型是引用类型,就没有必要返回他们的指针。
go">func make(t Type, size ...IntegerType) Type
  • new 函数原型如下,返回一个指向该类型内存地址的指针。
go">func new(Type) *Type

http://www.ppmy.cn/devtools/146234.html

相关文章

【设计模式】命令模式

什么是命令模式 命令模式是一种行为型设计模式。 它可将请求转换为一个包含与请求相关的所有信息的独立对象。 该转换让你能根据不同的请求将方法参数化、 延迟请求执行或将其放入队列中, 且能实现可撤销操作。 例如你正在开发一款新的文字编辑器, 包含…

React 组件中 State 的定义、使用及正确更新方式

​🌈个人主页:前端青山 🔥系列专栏:React篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来React篇专栏内容React 组件中 State 的定义、使用及正确更新方式 前言 在 React 应用开发中,state …

R语言的数据类型

标题:《探索R语言数据类型的奥秘》 引言: 在统计学和数据分析的世界里,R语言无疑是一颗璀璨的明星。它以其强大的数据处理能力和丰富的图形展示功能而受到广泛欢迎。然而,要熟练掌握并高效使用R语言,深入了解其数据类…

Linux应用软件编程-多任务处理(进程)

多任务:让系统具备同时处理多个事件的能力。让系统具备并发性能。方法:进程和线程。这里先讲进程。 进程(process):正在执行的程序,执行过程中需要消耗内存和CPU。 进程的创建:操作系统在进程创…

SQL-leetcode-180. 连续出现的数字

180. 连续出现的数字 表:Logs -------------------- | Column Name | Type | -------------------- | id | int | | num | varchar | -------------------- 在 SQL 中,id 是该表的主键。 id 是一个自增列。 找出所有至少连续出现三次的数字。 返回的…

DocFlow票据AI自动化处理工具,提升企业票据数字化管理效能

随着全球化与信息化进程,企业的文件、信息、数据吞吐量不断增长,2020年以来,业务形势的变革再次加速了企业对先进的文档数字化管理解决方案需求。其中,票据处理始终面临着文件量大耗时、单据高度多样化、“淡旺季”周期波动性强、…

.NET周刊【12月第3期 2024-12-15】

国内文章 重磅推出 Sdcb Chats:一个全新的开源大语言模型前端 https://www.cnblogs.com/sdcb/p/18597030/sdcb-chats-intro Sdcb Chats是一个新推出的开源大语言模型前端,旨在提升用户交互体验,并填补市场上基于.NET的前端空白。它引入树状…

vulnhub靶机billu_b0x精讲

靶机下载 https://www.vulnhub.com/entry/billu-b0x,188/ 信息收集 扫描存活主机 nmap -sP 192.168.73.0/24 192.168.73.141为目标主机,对其进行进一步信息收集 端口扫描 nmap --min-rate10000 -p- 192.168.73.141 目标只开放了22和80端口 针对端口进行TCP探…