Golang中指针的使用详解

 更新时间:2023年04月28日 09:16:29   作者:Scora_liu  
Golang是一门支持指针的编程语言,指针是一种特殊的变量,存储了其他变量的地址。通过指针,可以在程序中直接访问和修改变量的值,避免了不必要的内存拷贝和传递。Golang中的指针具有高效、安全的特点,在并发编程和底层系统开发中得到广泛应用

1.概念

指针:指向内存地址的变量,指针用来存储变量的内存地址

Go 语言定义变量必须声明数据类型,因为不同数据类型的数据占用不同的存储空间,导致内存地址分配大小各不相同,所有指针只能存放同一类型变量的内存地址。

指针分为两种:类型指针和切片指针

类型指针允许对数据进行修改,直接使用指针传递数据,无须复制数据,但类型指针不能进行偏移和运算。

切片指针是切片类型的指针,它包含起始元素的原始指针、元素数量和容量

  • 指针:也称为指针变量,即用来存放内存地址的变量,一般情况下,内存地址的数据格式以0xcXXXXXXX表示,如0xc0000180a8或0xc0000ac058等
  • 指针是一个变量,也有自己的内存地址,它存放的内存地址是另一个变量的内存地址
  • 指针类型:是指针存放的内存地址的大小,比如指针a 定义为 int 类型,它只能存放整型变量的内存地址,所以在使用指针的时候必须声明指针类型,确保指针只能存放一种数据类型
  • 指针赋值:将某个变量的内存地址赋值给指针,在某个变量前面使用取地址操作符“ & ”即可获取变量的内存地址
  • 指针取值:从指针变量中通过某个变量的内存地址获取对应的数值,只需在指针变量前面使用取值操作符“ * ”即可

2.指针定义与空指针

语法格式

var name *type

name 代表指针变量名

type 是指针变量的数据类型,如数字、字符串、切片等Go语言内置的数据类型

Go 语言的空值用 nil 表示

空指针:指针为空值

3.指针赋值与取值

在Go语言编程中,所有变量先定义后使用

// 定义一个 int 类型的变量 name 并赋值 200
var name int = 200
// 定义一个 int 类型的指针
var ptr *int
// 指针赋值,将 name 的内存地址赋值给 ptr,通过取地址符“ & ”
ptr = &name
// 指针取值,在 ptr 前面使用 “ * ” 获取 name 的值
name1 := *ptr
/*
    & 取出内存地址
    * 根据内存地址取出对应的数值
*/

4.切片指针

切片是一种比较特殊的数据结构,便于使用和管理数据集合

切片是围绕动态数组的概念构建的,可以按需自动增长和缩小

切片可以理解为动态数组,并根据切片里的元素自动调整切片长度

Go 语言的切片指针是以切片表示的,切片的每个元素只能存放内存地址

切片指针的语法定义如下:

// 定义方式一
var name []*type
// 定义方式二
name := []*type{}
 

name 代表指针变量名

type 是指针变量的数据类型,如数字、字符串等 Go 语言内置的数据类型

切片指针可以将多个变量的内存地址存放在切片中,这样方便管理多个变量

切片指针定义后,如果没有设置初始值,默认为空,由于切片是动态数组,其数据长度能自动调整,Go 语言不会分配内存地址,因此无法通过取地址操作符 “ & ”获取切片指针的内存地址

5.指针的指针

指针的指针:是一个指针变量指向另一个指针变量,另一个指针变量指向某个变量

语法格式:

// 定义指针的指针
var name **type
// 从指针的指针获取某个变量的值
v := **name

name 代表指针变量名,使用两个取值操作符 “ * ”定义为指针的指针

type 是指针变量的数据类型,如数字、字符串、切片等Go 语言内置的数据类型

v 是从指针的指针获取某个变量的值,必须使用两个取值操作符 “ * ”实现

到此这篇关于Golang中指针的使用详解的文章就介绍到这了,更多相关Golang指针内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Golang回调函数与闭包和接口函数的定义及使用介绍

    Golang回调函数与闭包和接口函数的定义及使用介绍

    这篇文章主要介绍了Golang回调函数与闭包和接口函数的定义及使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习吧
    2023-05-05
  • Go Excelize API源码解读GetSheetViewOptions与SetPageLayout

    Go Excelize API源码解读GetSheetViewOptions与SetPageLayo

    这篇文章主要为大家介绍了Go Excelize API源码解读GetSheetViewOptions与SetPageLayout方法示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-08-08
  • Golang项目搭配nginx部署反向代理负载均衡讲解

    Golang项目搭配nginx部署反向代理负载均衡讲解

    这篇文章主要为大家介绍了Golang项目搭配nginx部署正反向代理负载均衡讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • 详解golang各种类型是如何进行比较的

    详解golang各种类型是如何进行比较的

    在日常开发中,比较操作是最常用的基本操作之一,可以用来判断变量之间是否相等或者对应的大小关系,比较操作对于排序、查找和集合数据结构的实现至关重要,本文将深入解析golang各种类型是如何进行比较的,需要的朋友可以参考下
    2024-01-01
  • Go语言开发浏览器视频流rtsp转webrtc播放

    Go语言开发浏览器视频流rtsp转webrtc播放

    这篇文章主要为大家介绍了Go语言开发浏览器视频流rtsp转webrtc播放的过程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • goFrame的gqueue与channe的区别

    goFrame的gqueue与channe的区别

    这篇文章主要介绍了goFrame的gqueue与channe的区别,channel的作用是用于go协程间的通信,goroutine和channel是支持高并发的重要组成部分,更多两者详细介绍需要的小伙伴可以参考下面文章内容
    2022-06-06
  • 浅析go中的map数据结构字典

    浅析go中的map数据结构字典

    golang中的map是一种数据类型,将键与值绑定到一起,底层是用哈希表实现的,可以快速的通过键找到对应的值。这篇文章主要介绍了go中的数据结构字典-map,需要的朋友可以参考下
    2019-11-11
  • go语言 swagger 查询 json 字段注释的示例代码

    go语言 swagger 查询 json 字段注释的示例代码

    在Go语言中,使用Swagger通过swag工具和gin-gonic框架生成API文档,涉及引入依赖、定义模型、添加注释等步骤,示例中展示了如何为接受查询参数的API端点添加注释,感兴趣的朋友跟随小编一起看看吧
    2024-09-09
  • Go中gin框架的*gin.Context参数常见实用方法

    Go中gin框架的*gin.Context参数常见实用方法

    *gin.Context是处理HTTP请求的核心,ctx代表"context"(上下文),它包含了处理请求所需的所有信息和方法,例如请求数据、响应构建器、路由参数等,这篇文章主要介绍了Go中gin框架的*gin.Context参数常见实用方法,需要的朋友可以参考下
    2024-07-07
  • Golang极简入门教程(四):编写第一个项目

    Golang极简入门教程(四):编写第一个项目

    这篇文章主要介绍了Golang极简入门教程(四):编写第一个项目,本文讲解了workspace、包路径、第一个可执行命令等内容,需要的朋友可以参考下
    2014-10-10

最新评论