主页 > 知识库 > Go 语言的指针的学习笔记

Go 语言的指针的学习笔记

热门标签:呼叫中心市场需求 地方门户网站 服务外包 AI电销 Linux服务器 铁路电话系统 网站排名优化 百度竞价排名

Go 的原生数据类型可以分为基本类型和高级类型,基本类型主要包含 string, bool, int 及 float 系列,高级类型包含 struct,array/slice,map,chan, func 。

相比 Java,Python,Javascript 等引用类型的语言,Golang 拥有类似C语言的指针这个相对古老的特性。但不同于 C 语言,Golang 的指针是单独的类型,而不是 C 语言中的 int 类型,而且也不能对指针做整数运算。从这一点看,Golang 的指针基本就是一种引用。

那么 Golang 为什么需要指针?这种指针又能有什么独特的用途呢?

在学习引用类型语言的时候,总是要先搞清楚,当给一个函数/方法传参的时候,传进去的是值还是引用。实际上,在大部分引用型语言里,参数为基本类型时,传进去的大都是值,也就是另外复制了一份参数到当前的函数调用栈。参数为高级类型时,传进去的基本都是引用。这个主要是因为虚拟机的内存管理导致的。

内存管理中的内存区域一般包括 heap 和 stack, stack 主要用来存储当前调用栈用到的简单类型数据:string,boolean,int,float 等。这些类型的内存占用小,容易回收,基本上它们的值和指针占用的空间差不多,因此可以直接复制,GC也比较容易做针对性的优化。 复杂的高级类型占用的内存往往相对较大,存储在 heap 中,GC 回收频率相对较低,代价也较大,因此传引用/指针可以避免进行成本较高的复制操作,并且节省内存,提高程序运行效率。

因此,在下列情况可以考虑使用指针:1,需要改变参数的值;2,避免复制操作;3,节省内存;

变量是一种使用方便的占位符,用于引用计算机地址,而在 Go 语言中可以通过 符号获取一个变量在计算机中对应的内存地址。

package basic

import "fmt"

func main(){
  a := 1
  fmt.Println(a) // 0xc4200180a0
}

一个指针变量指向了一个值的内存地址。Go 语言中的指针语法与 C++ 类似,都是使用 * 符号声明指针变量;

package basic

import "fmt"

func main(){
  a := 1
  var p *int = a
  
  fmt.Printf("获取变量内存地址 %x\n", p) // 获取变量内存地址 c4200180a0
  fmt.Printf("获取指针变量值 %v", *p) // 获取指针变量值 1
}

Go 语言虽然有指针,但是没有指针算数,不能对其进行加减,但可以把指针值赋给另一个指针。这也就是 Golang 中的指针与 C++ 中指针的最大区别。

值传递?引用传递?

在学习引用类型语言时,我们首先要搞清楚,当给一个函数/方法传参的时候,使用的是指传递还是引用传递。实际上,大部分引用类型语言,参数为基本类型时,使用的是值传递。也就是另外复制了一份参数到当前的函数调用栈。参数为高级类型时,使用的是引用传递。这个主要是因为虚拟机的内存管理导致的。

内存管理中的内存区域一般包括 堆(heap) 和 栈(stack) 主要用来存储当前调用栈用到的简单数据类型:string、boolean、int、float 等。这些类型的内存占用小,容易回收,基本上它们的值和指针占用的空间差不多,因此可以直接复制,GC 也比较容易做针对性的优化。复杂的高级类型占用的内存往往相对较大,存储在 堆(heap) 中,GC回收率相对较低,代价也较大,因此传 引用/指针 可以避免进行成本较高的复制操作,并且节省内存,提高程序运行效率。

因此,在以下情况下可以考虑使用指针:

  • 需要改变参数的值;
  • 避免复制操作;
  • 节省内存;

而在 Golang 中,具体到高级类型 struct,slice,map 也各有不同。实际上,只有 struct 的使用有点复杂,slice,map,chan 都可以直接使用,不用考虑是值还是指针。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
  • Go语言应该什么情况使用指针
  • 关于Golang中range指针数据的坑详解
  • Go语言中结构体方法副本传参与指针传参的区别介绍
  • golang中值类型/指针类型的变量区别总结
  • golang方法中receiver为指针与不为指针的区别详析
  • Go语言中的指针运算实例分析
  • Go语言指针访问结构体的方法
  • Go语言指针使用分析与讲解

标签:湘潭 衡水 黄山 崇左 兰州 铜川 仙桃 湖南

巨人网络通讯声明:本文标题《Go 语言的指针的学习笔记》,本文关键词  ;如发现本文内容存在版权问题,烦请提供相关信息告之我们,我们将及时沟通与处理。本站内容系统采集于网络,涉及言论、版权与本站无关。
  • 相关文章
  • 收缩
    • 微信客服
    • 微信二维码
    • 电话咨询

    • 400-1100-266