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

ops/2024/12/27 6:21:19/

✍个人博客: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/ops/145302.html

相关文章

mac远程控制另一台mac怎么操作?

远程协助是指通过网络从一台电脑远程控制另一台电脑,从而提供远程帮助。比如,当父母的电脑遇到了一些问题,就可以通过远程协助进行解决。那么,如何实现对Mac电脑的远程控制呢? 要远程控制Mac电脑屏幕,可以…

Docker下sward安装配置指南

sward是一个开源免费企业级知识库管理软件,我们在上篇文章简单介绍过它的功能与优势,今天来介绍一下怎么安装私有部署版本。 1. 安装 点击官网 -> 演示与下载 ->下载,下载Docket安装包, 安装包名字为tiklab-sw…

Bash 脚本教程

注:本文为 “Bash 脚本编写” 相关文章合辑。 BASH 脚本编写教程 as good as well于 2017-08-04 22:04:28 发布 这里有个老 American 写的 BASH 脚本编写教程,非常不错,至少没接触过 BASH 的也能看懂! 建立一个脚本 Linux 中有…

青少年科普教学系统平台的设计与实现springboot

摘 要 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面面。它让信息都可以通过网络传播,搭配信息管理工具可以很好地为人们提供服务。针对高校教师成果信息管理混乱,出错率高,信息安…

Linux(Ubuntu/CentOS)配置开机自启动服务

systemd和systemctl的区别和联系 systemd:是现代Linux系统中的初始化系统和服务管理器。它主要负责系统引导和进程管理,支持并行化启动服务,并提供高级的服务管理和依赖控制。 systemctl:是systemd的命令行工具,用于与…

CPU条件下Pytorch、jupyter环境配置

一、创建虚拟环境 查看虚拟环境 conda env list 创建python虚拟环境 conda create -n minist python3.11 激活虚拟环境 conda activate minist 查看虚拟环境下有哪些包 pip list 二、安装pytorch 切换清华源 conda config --add channels https://mirrors.tuna.tsing…

无需公网 IP 实现外部访问 Puter 一站式云平台

Puter 是一款隐私至上的个人云,它是开源桌面环境,运行在浏览器中,这款桌面环境具备丰富的功能、异常快速和高度可扩展性。它可以用于构建远程桌面环境,也可以作为云存储服务、远程服务器、Web 托管平台等的界面。 第一步&#xf…

windows调整鼠标速度

参考:https://baijiahao.baidu.com/s?id1791659684803021646&wfrspider&forpc 鼠标灵敏度,亦称为指针速度或DPI(每英寸点数)设置,对用户的电脑操作流畅度和精准度至关重要。本篇文章将深入解析如何在Windows操作系统环境…