Golang 开发实战day12 - Pointer

2024-05-07 18:36

本文主要是介绍Golang 开发实战day12 - Pointer,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

🏆个人专栏
🤺 leetcode
🧗 Leetcode Prime
🏇 Golang20天教程
🚴‍♂️ Java问题收集园地
🌴 成长感悟
欢迎大家观看,不执着于追求顶峰,只享受探索过程

Golang 开发实战day12 - 指针

  在 Golang 中,指针是一种强大的工具,可以让我们直接操作内存中的数据。与其他编程语言相比,Golang 的指针更加轻量级,但也更灵活,这使得它在性能和开发效率之间取得了良好的平衡。

1、指针的基本概念

  指针就像一张指向内存中某个位置的地址的纸条。我们可以通过指针来访问和修改该位置的数据。

1.1 声明指针:

var p *int // 声明一个指向 int 型数据的指针

1.2 获取指针的值:

i := 10
p = &i // 将变量 i 的地址赋给指针 p
fmt.Println(*p) // 输出 10

1.3 修改指针的值:

*p = 20 // 将指针 p 指向的值修改为 20
fmt.Println(i) // 输出 20

2 示例代码

示例一

func updateName(x string) {x = "大雄"
}func main() {name := "哆啦A梦"updateName(name)fmt.Println("名字所在的内存地址:", &name)m := &namefmt.Println(m)fmt.Println(name)
}

Output:

底下就是帮助理解的结构,m是引用了name的指针,所以地址也是指向了name的地址。比较简陋,往君见谅。

    |---name---|-----m-----| |  0x001   |   0x002   ||----------|-----------|| "哆啦A梦" |   p0x001  ||----------|-----------|

示例二

type Person struct {Name stringAge  int
}func main() {person := Person{Name: "大雄", Age: 10}name := &person.Name // 获取指向 Name 字段的指针*name = "哆啦A梦"       // 修改 Name 字段的值age := &person.Age // 获取指向 Age 字段的指针*age = 12         // 修改 Age 字段的值fmt.Println(person)
}

Output:
在这里插入图片描述

3 指针的优点

  • 高效: 指针可以让我们直接操作内存中的数据,而无需进行额外的复制操作,因此效率更高。
  • 方便: 指针可以方便地传递和共享数据,而无需创建额外的副本。
  • 灵活: 指针可以让我们直接修改内存中的数据,而无需创建新的变量。

4 指针的注意事项

  • 指针不能指向不存在的数据: 确保指针指向的内存地址有效,否则会导致程序崩溃。
    不要同时使用多个指针指向同一块内存: 避免数据竞争,导致程序行为不可预料。
  • 释放不再使用的指针: 使用 defer 语句或其他方式释放不再使用的指针,避免内存泄漏。

5 指针的常见用法

  • 函数参数和返回值: 指针可以作为函数的参数和返回值,提高函数的效率和灵活性。
  • 结构体和数组: 指针可以用于访问和修改结构体和数组中的元素。
  • 内存管理: 指针可以用于手动管理内存,例如分配和释放内存空间。

这篇关于Golang 开发实战day12 - Pointer的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/968068

相关文章

React+TS前台项目实战(十七)-- 全局常用组件Dropdown封装

文章目录 前言Dropdown组件1. 功能分析2. 代码+详细注释3. 使用方式4. 效果展示 总结 前言 今天这篇主要讲全局Dropdown组件封装,可根据UI设计师要求自定义修改。 Dropdown组件 1. 功能分析 (1)通过position属性,可以控制下拉选项的位置 (2)通过传入width属性, 可以自定义下拉选项的宽度 (3)通过传入classN

Eclipse+ADT与Android Studio开发的区别

下文的EA指Eclipse+ADT,AS就是指Android Studio。 就编写界面布局来说AS可以边开发边预览(所见即所得,以及多个屏幕预览),这个优势比较大。AS运行时占的内存比EA的要小。AS创建项目时要创建gradle项目框架,so,创建项目时AS比较慢。android studio基于gradle构建项目,你无法同时集中管理和维护多个项目的源码,而eclipse ADT可以同时打开

Python应用开发——30天学习Streamlit Python包进行APP的构建(9)

st.area_chart 显示区域图。 这是围绕 st.altair_chart 的语法糖。主要区别在于该命令使用数据自身的列和指数来计算图表的 Altair 规格。因此,在许多 "只需绘制此图 "的情况下,该命令更易于使用,但可定制性较差。 如果 st.area_chart 无法正确猜测数据规格,请尝试使用 st.altair_chart 指定所需的图表。 Function signa

WDF驱动开发-WDF总线枚举(一)

支持在总线驱动程序中进行 PnP 和电源管理 某些设备永久插入系统,而其他设备可以在系统运行时插入和拔出电源。 总线驱动 必须识别并报告连接到其总线的设备,并且他们必须发现并报告系统中设备的到达和离开情况。 总线驱动程序标识和报告的设备称为总线的 子设备。 标识和报告子设备的过程称为 总线枚举。 在总线枚举期间,总线驱动程序会为其子 设备创建设备对象 。  总线驱动程序本质上是同时处理总线枚

PyTorch模型_trace实战:深入理解与应用

pytorch使用trace模型 1、使用trace生成torchscript模型2、使用trace的模型预测 1、使用trace生成torchscript模型 def save_trace(model, input, save_path):traced_script_model = torch.jit.trace(model, input)<

JavaWeb系列六: 动态WEB开发核心(Servlet) 上

韩老师学生 官网文档为什么会出现Servlet什么是ServletServlet在JavaWeb项目位置Servlet基本使用Servlet开发方式说明快速入门- 手动开发 servlet浏览器请求Servlet UML分析Servlet生命周期GET和POST请求分发处理通过继承HttpServlet开发ServletIDEA配置ServletServlet注意事项和细节 Servlet注

手把手教你入门vue+springboot开发(五)--docker部署

文章目录 前言一、前端打包二、后端打包三、docker运行总结 前言 前面我们重点介绍了vue+springboot前后端分离开发的过程,本篇我们结合docker容器来研究一下打包部署过程。 一、前端打包 在VSCode的命令行中输入npm run build可以打包前端代码,出现下图提示表示打包完成。 打包成功后会在前端工程目录生成dist目录,如下图所示: 把

Sapphire开发日志 (十) 关于页面

关于页面 任务介绍 关于页面用户对我组工作量的展示。 实现效果 代码解释 首先封装一个子组件用于展示用户头像和名称。 const UserGrid = ({src,name,size,link,}: {src: any;name: any;size?: any;link?: any;}) => (<Box sx={{ display: "flex", flexDirecti

ROS2从入门到精通4-4:局部控制插件开发案例(以PID算法为例)

目录 0 专栏介绍1 控制插件编写模板1.1 构造控制插件类1.2 注册并导出插件1.3 编译与使用插件 2 基于PID的路径跟踪原理3 控制插件开发案例(PID算法)常见问题 0 专栏介绍 本专栏旨在通过对ROS2的系统学习,掌握ROS2底层基本分布式原理,并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。 🚀详情:《ROS2从入门到精通》 1 控制插

JavaWeb 学习笔记 spring+jdbc整合开发初步

JdbcTemplate类是Spring的核心类之一,可以在org.springframework.jdbc.core中找到它。JdbcTemplate类在内部已经处理数据库的建立和释放,可以避免一些常见的错误。JdbcTemplate类可直接通过数据源的应用实例化,然后在服务中使用,也可在xml配置中作为JavaBean应用给服务使用直接上一个实例步骤1.xml配置 <?xml version