Go 面试题 002:Go 中的指针有什么作用?
共 1256字,需浏览 3分钟
·
2021-09-28 09:29
欢迎大家再次来到 『Go 语言面试题库』 这个专栏,前几天一直在准备面试,也还没有抽空时间来把最近几天写的这些内容发表出来。
从今天开始,我会日更这个系列的文章,希望跟大家一些学习进步。
再次说明一下,前面几篇都非常的基础,本来我也不想发表这么基础的题,有的可能一句话就能回答的事情,也没什么可以写的。
但考虑该系列专栏的系统性,又不得不写,因为我是希望该系列专栏能适用于所有的人。
但同时我也不占用大家的时间线,就一次性利用二栏,三栏,四栏等的位置,把这些基础的内容全部发表出来。
后续可能也还会补充一些基础的,到时也会采用这个发文策略。
先跟大家汇报一下进度,到今天(2021.9.25)为止,我已经完成了 34 篇。
由于文章主题都是临时起意,想到什么写什么,并没有提前列好提纲,因此基础和进阶的内容会交叉发布,这一点再声明一下,大家可以按需阅读。
同时我对已完成的文章进行了分类,发布到了 Github 上:
链接:https://github.com/iswbm/golang-interview
整个系列的文章目录,你可以点击本篇文章顶部的 『Go 语言面试题库』进入浏览。
第二题
请听题:
Go 中的指针有什么用?
# 什么是指针和指针变量
普通的变量,存储的是数据,而指针变量,存储的是数据的内存地址。
学习指针,主要有两个运算符号,要记牢
&:地址运算符,从变量中取得值的内存地址
// 定义普通变量并打印
age := 18
fmt.Println(age) //output: 18
ptr := &age
fmt.Println(ptr) //output:
*:解引用运算符,从内存地址中取得存储的数据
myage := *ptr
fmt.Println(myage) //output: 18
# 指针的意义是什么?
意义一:省内存
当你往一个函数传递参数时,若该参数是一个值类型的变量,则在调用函数时,会将原来的变量的值拷贝一遍。
假想每次传参都用数组,那么每次数组都要被复制一遍。如果数组大小有 100万,在64位机器上就需要花费大约 800W 字节,即 8MB 内存。这样会消耗掉大量的内存。
意义二:易编码
写了一个函数来实现更新某对象里的一些数据,在值类型的变量中,若不使用指针,则函数需要重新返回一个更新过的全新对象。
而有了指针,则可以不用返回。
是不是很简单?跟着明哥一起来攻克 Go 的各个边边角角的知识吧?
加油噢,我们下篇见
⬇⬇⬇