前言

在Go里面pointer就是1种可以把内存地址的存储起来的数据类型。我们使用pointer数据类型的变量可以记录下另1个变量的内存地址,方便我们修改这变量的值。

 

为什么Go中使用了指针?

因为指针可以帮助我们节省内存,我们知道在程序运行时值类型的变量被赋值之后会对值进行重新拷贝,如果我们每次拷贝的是1个指针类型的变量呢?

还有Go函数里面传递的参数都是副本也就是重新copy一份,我们如何在函数中修该1个外部变量。我们可以通过记录下值类型变量的内存地址,来达到修改值类型变量的目的。

 

区别于C/C++中的指针,Go语言中的指针不能进行偏移和运算,只能读取指针的位置,是安全指针,所有Go里面的指针比较简单。

还有很重要的一点就是我们可以对1个真正存储值的变量,设置多个指针,就可以做引用数据类型。起到节省内存的效果。

 

只需要记住以下几点:

&变量名: 获取变量的内存地址

*pointor:通过指针类型的变量,获取该指针指向的值

 

什么是指针

 

 

不管是Python还是Go程序 执行过程中数据(变量)载入内存后,在计算机内存中都有该变量所在的内存地址,这就是指针。

 

 

 

指针就是1个保存了另1个变量所在内存地址的变量,该变量记录了X\y\a\s变量的内存地址,我们就可以通过指针变量在广袤的内存上快速查找到X\y\a\s变量。对其就行修改。

  

*int*int64*string

 

指针操作

 

golang的指针是安全的默认不能进行偏移和运算,只能读取指针的位置。但是如果它变成unsafe的也是可以的。

 

  

 

 

 

 

new和make的区别

前面我知道使用make可以创建1个切片数据类型的变量,并且该slice在没有赋值前,就有默认值(开辟了内存空间);

make 和new在Go中都是用于申请内存的

new用于给Go中基本的数据类型申请内存(int/string/bool)返回的是对应数据类型的指针(*int/*string/*bool)

 

make用于给复杂数据类型申请内存(slice/map/chanel/struct),返回值=默认值的数据类型本身。