7 天能找到 Go 工作吗?学学 Go 数组和指针试试
学习之前
对于一个 Python 工程师来说,数组和指针在 Python 中都没有明确概念,所以这部分知识点只能依赖 C/C++的积累了。
学习数组的时候,可以参考 Python 的列表进行实践。
Go 数组
先看一下数组的定义,它是一个由固定长度的特定数据类型元素组成的序列,其中有两个关键点,其一是数组长度固定,其二是特定数据类型。
其语法结构如下:
其中元素数量要求必须是整数类型,数据类型可以是任意基本类型,当然包括数组类型,该情况就会形成多维数组。
测试代码之后,会发现数组未初始化前,默认值就是数据类型的零值,对于数组也存在索引取值的问题,这点有其它语言的基础,很容易理解。
下面在看一下如何对数组进行初始化操作。
可以看到数组输出结果显示如下:
第二个数组变量 a_array2
由于没有做初始化,所以直接展示为 0 。
上述在初始化数组的时候,都是知道数组长度的,如果不确定数组长度,可以使用 ...
对数组进行初始化。
打印输出的 %T
表示输出类型。
数组一旦声明长度之后,无法修改,该知识点你可以用代码复现一下。
Go 指针
在 Go 中,取地址符是 &
,使用 &var
就可以获取 var
的内存地址。
测试代码如下所示:
输出结果如下所示:
Go 指针和 C 指针一样的概念,指针变量就是声明一个指向内存地址的变量。
在使用前,需要提前进行声明,格式如下:
其中 var_type
为指针类型,var_name
是指针变量名,特殊符号 *
标记指针。
例如我们声明一个整型指针,可以使用下述格式。
指针如果被声明但未被赋值,默认值是 nil
,大家习惯指针的缩写是 ptr
。
在 Go 中每个变量都有地址,指针的值就是地址。
接下来我们可以进行下面的这个实验,从指针获取【指针指向的值】,代码如下:
输出内容如下所示:
这里就要对比一下取地址操作符(&
)和取值操作符(*
)的区别。
&
:取出地址;*
:根据地址取值。
接下来在实现一个通过指针修改值。
此时运行代码,发现通过 *ptr
已经成功修改了变量 vari1
的值。
这里唯一要琢磨的知识点是 *
操作符出现的位置,如果其出现在等号右侧,表示取指针的值,放到等号左侧,表示指针指向的变量。
版权声明: 本文为 InfoQ 作者【梦想橡皮擦】的原创文章。
原文链接:【http://xie.infoq.cn/article/82b4fc2f34f4cc46b32c3e23c】。文章转载请联系作者。
评论