Go 如何使用指针灵活操作内存

news2024/7/30 0:38:14

在这里插入图片描述
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。
在这里插入图片描述

  • 推荐:「stormsha的主页」👈,持续学习,不断总结,共同进步,为了踏实,做好当下事儿~

  • 专栏导航

    • Python系列: Python面试题合集,剑指大厂
    • Git系列: Git操作技巧
    • GO系列: 记录博主学习GO语言的笔记,该笔记专栏尽量写的试用所有入门GO语言的初学者
    • 数据库系列: 详细总结了常用数据库 mysql 技术点,以及工作中遇到的 mysql 问题等
    • 运维系列: 总结好用的命令,高效开发
    • 算法与数据结构系列: 总结数据结构和算法,不同类型针对性训练,提升编程思维

    非常期待和您一起在这个小小的网络世界里共同探索、学习和成长。💝💝💝 ✨✨ 欢迎订阅本专栏 ✨✨

    💖The Start💖点点关注,收藏不迷路💖

    📒文章目录

      • 指针基础
      • 指针的赋值与解引用
      • 指针与数组
      • 指针与切片
      • 指针与结构体
      • 指针与函数
      • 指针与内存分配
      • 指针的安全性
      • 总结


内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容内容

在 Go 语言中,指针是一种强大的工具,它允许开发者直接操作内存,从而提高程序的性能和灵活性。本文将深入探讨 Go 中指针的使用技巧,帮助开发者更高效地编写代码。

指针基础

在 Go 中,指针是指向变量内存地址的变量。每个变量都有一个内存地址,而指针变量存储的就是这个地址。声明指针的基本语法是:

var ptr *int

这里,ptr 是一个指向 int 类型的指针。

指针的赋值与解引用

指针可以被赋值为变量的地址,使用 & 操作符可以获取变量的地址:

var value int = 10
ptr = &value

此时,ptr 指向 value 的内存地址。要访问指针指向的值,可以使用解引用操作符 *

fmt.Println(*ptr) // 输出:10

指针与数组

在 Go 中,数组名本身就是一个指向数组第一个元素的指针。这意味着,当你将数组作为参数传递给函数时,实际上是在传递数组的指针。这不仅可以减少内存的复制,还可以在函数内部修改原数组的元素。

func modifyArray(arr *[5]int) {
    (*arr)[0] = 20
}

func main() {
    myArray := [5]int{1, 2, 3, 4, 5}
    modifyArray(&myArray)
    fmt.Println(myArray) // 输出:[20 2 3 4 5]
}

指针与切片

切片在 Go 中是一种动态数组,它底层实际上是一个结构体,包含指向数组的指针、长度和容量。通过指针,我们可以操作切片的底层数组。

func appendToSlice(slice []int, value int) {
    slice = append(slice, value)
}

func main() {
    mySlice := []int{1, 2, 3}
    appendToSlice(mySlice, 4)
    fmt.Println(mySlice) // 输出:[1 2 3 4]
}

指针与结构体

结构体是 Go 中实现面向对象编程特性的一种方式。通过指针,我们可以在函数中修改结构体的字段。

type MyStruct struct {
    Field int
}

func modifyStruct(s *MyStruct) {
    s.Field = 100
}

func main() {
    myStruct := MyStruct{Field: 10}
    modifyStruct(&myStruct)
    fmt.Println(myStruct.Field) // 输出:100
}

指针与函数

在 Go 中,函数可以返回指针类型的值。这使得我们可以在函数中创建新的变量,并将其地址返回给调用者。

func createInt() *int {
    var value int = 42
    return &value
}

func main() {
    ptr := createInt()
    fmt.Println(*ptr) // 输出:42
}

指针与内存分配

Go 运行时提供了垃圾回收机制,但是有时候我们仍然需要手动管理内存。使用 new 关键字可以分配内存,并返回指向新分配内存的指针。

func main() {
    ptr := new(int)
    *ptr = 10
    fmt.Println(*ptr) // 输出:10
}

指针的安全性

虽然指针提供了极大的灵活性,但也带来了潜在的风险。例如,使用未初始化的指针或解引用空指针都会导致运行时错误。因此,在使用指针时,开发者需要格外小心。

总结

指针是 Go 语言中一个强大的特性,它允许开发者以低级的方式操作内存。通过掌握指针的使用技巧,开发者可以编写出更高效、更灵活的代码。然而,使用指针也需要谨慎,以避免潜在的错误和安全问题。

在本文中,我们探讨了 Go 中指针的多种使用技巧,包括与数组、切片、结构体和函数的交互,以及如何安全地使用指针。希望这些知识能够帮助你更好地理解和使用 Go 语言中的指针。


🔥🔥🔥道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

💖The End💖点点关注,收藏不迷路💖

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1860243.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Vue3整合Tailwindcss实现渲染动态类

创建项目 pnpm create vite整合Tailwindcss 安装依赖: pnpm install -D tailwindcss postcss autoprefixer生成配置文件: npx tailwindcss initpostcss.config.js export default {plugins: {tailwindcss: {},autoprefixer: {},}}tailwind.config.j…

【产品经理】订单处理10-分配快递策略

本次主要讲解下在订单处理过程中分配快递的策略以及分配快递中需要用到的设置。 一、建立快递档案 在ERP系统中,需要建立快递档案,设置所属快递、快递的服务类型、支持的打印模版以及快递在各个平台的电子面单支持情况。 二、仓库绑定快递 仓库需要设…

golang 实现继承方式

经常使用java或c同学应该比较了解纯面向对象,继承、接口、封装等特性,在go中并没有特别显示的表达出来,但是go隐含是支持的,只是支持的方式不一致,可以说go的方式更加灵活,go语言精髓是组合机制&#xff0c…

一口气安装【Python】教程

浏览器搜索python,或者直接跳转网址。 https://www.python.orghttps://www.python.org/ 找到想下载的版本 根据自己电脑下载相应的版本 自定义安装 下一步 修改路径,然后点击安装 等待一会,喝个饮料 点击关闭 安装成功 安装结束

CEWEY C9自动猫砂盆测评:千元级安全实用稳定输出,解放铲屎官双手!

最近邻居姐姐成为新晋铲屎官,猫咪的吃喝还好,因为是打工人每天要早出晚归,铲屎这项不能等待的任务就让她很苦恼,猫砂盆太脏猫咪要么憋着不上要么乱拉乱尿,搞得小姐姐身心俱疲。看着她日渐憔悴的脸色,我这个…

软考中级复习过程

中级软考复习过程 先上成绩截图 ~~~~ 总结一下自己的软考中级备考过程,个人备考的是软件设计师,首先对于软考中的大部分内容其实我都学过的,只是有些内容确实会忘记,我把整个备考的过程分为前后两个阶段。 ~~~~ 前期阶段&#…

复分析——第7章——ζ 函数和素数定理(E.M. Stein R. Shakarchi)

第7章 ζ函数和素数定理 Bernhard Riemann, whose extraordinary intuitive powers we have already mentioned, has especially renovated our knowledge of the distribution of prime numbers, also one of the most mysterious questions in mathematics. He has tau…

如何在 Odoo 17 库存模块中进行质量控制

质量控制是确保制造产品质量符合最终要求的关键步骤。有效的质量控制能够提高客户满意度。在生产过程中,质量检测可以在多个环节进行,以便及时发现并解决问题。不同的行业采用的质量控制技术可能有所不同。 在商业尤其是制造业中,保证产品质量至关重要。一个产品需要经过多次…

百度地图使用任意图片旋转任意角度作为地面贴图

公司项目有个需求是要在地图上贴个航拍的照片做出类似卫星地图的效果,但是只有一张图片而且可以随时替换,也不好做瓦片地图,而且照片的角度可以任意旋转。 要实现这个功能需要解决以下问题: 百度地图怎么贴图片图片角度如何旋转 …

el-dialog使用::v-deep()穿透设置样式不生效,解决办法亲测有效!

场景&#xff1a; <el-dialogv-model"dialogVisible"width"800px":before-close"beforeClose"append-to-body:close-on-click-modal"false"title"增加文档"><template #footer><div style"text-align:c…

开发大模型应用,到底使用RAG还是微调?我们应该从哪些方面考虑?

现在基于大模型开发应用时&#xff0c;相信很多人都有这种疑问&#xff0c;到底对大模型进行微调还是外接RAG呢&#xff1f;因为两者在一定层面上有很多相似的地方&#xff0c;下面让我给大家从各个层面进行分析&#xff0c;结合具体的业务场景&#xff0c;看哪种方式更适合你的…

【OnlyOffice】 桌面应用编辑器,版本8.1发布,PDF编辑器、幻灯片版式、改进从右至左显示、新的本地化选项等功能,快来体验吧

继 ONLYOFFICE 文档 8.1 发布后&#xff0c;适用于 Linux、Windows 和 macOS 的 ONLYOFFICE 桌面应用程序最新版本也已推出。它具有在线套件的最主要功能&#xff0c;例如功能齐全的 PDF 编辑器、演示文稿中的幻灯片版式、改进的 RTL 支持、新的本地化选项等。 目录 ONLYOFFICE…

【Unity Android】Unity链接安卓手机调试

一、物理连接手机 1.USB数据线链接 2.打开开发者模式 大部分手机在手机设置->系统管理->关于手机->软件版本型号中&#xff0c;点击7次以上&#xff0c;来开启系统管理中的开发者模式选项。 3.打开USB调试 打开开发者模式后&#xff0c;开启USB调试 二、Unity中…

Hi3861 OpenHarmony嵌入式应用入门--LiteOS Timer

LiteOS Timer&#xff08;定时器&#xff09;是LiteOS操作系统中的一个重要组件&#xff0c;它提供了一种基于软件模拟的定时器功能&#xff0c;用于满足在硬件定时器数量不足时的定时需求。 软件定时器&#xff1a;基于系统Tick时钟中断&#xff0c;由软件来模拟的定时器。当经…

表单(forms)

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 在app1文件夹下创建一个forms.py文件&#xff0c;添加如下类代码&#xff1a; from django import forms class PersonForm(forms.Form): first_na…

GPT-5:AI新纪元的领航者,多维度的审视与准备

一、引言&#xff1a;GPT-5与AI的多维演进 GPT-5作为AI领域的里程碑式突破&#xff0c;不仅仅代表了技术的飞跃&#xff0c;更预示着社会、文化以及经济等多个层面的深刻变革。从技术的角度看&#xff0c;GPT-5代表着AI在自然语言处理领域的最新高度&#xff1b;而从更宽广的视…

中国高分辨率土壤侵蚀因子K

土壤可蚀性因子&#xff08;K&#xff09;数据&#xff0c;基于多种土壤属性数据计算&#xff0c;所用数据包括土壤黏粒含量&#xff08;%&#xff09;、粉粒含量&#xff08;%&#xff09;、砂粒含量&#xff08;%&#xff09;、土壤有机碳含量&#xff08;g/kg&#xff09;、…

我国季戊四醇市场规模逐渐扩大 出口量有所增长

我国季戊四醇市场规模逐渐扩大 出口量有所增长 季戊四醇&#xff08;PETP/THME&#xff09;又称为四羟甲基甲烷、2,2-双羟甲基-1,3-丙二醇等&#xff0c;是一种多元醇类有机化合物&#xff0c;多表现为一种白色结晶性粉末。季戊四醇可溶于水及乙醇等溶剂&#xff0c;但不溶于苯…

台式扫描电镜工作距离越远观察区越大?

台式扫描电镜&#xff08;Scanning Electron Microscope, SEM&#xff09;是一种高分辨率的显微镜&#xff0c;它利用电子束扫描样品表面&#xff0c;通过样品与电子束相互作用产生的信号来形成图像。这种显微镜广泛应用于材料科学、生物学和医学等领域&#xff0c;以观察样品的…

AI元宇宙

随着科技的迅猛发展&#xff0c;人工智能&#xff08;AI&#xff09;迎来了一个宇宙大爆发的时代。特别是以GPT为代表的生成式大模型的诞生和不断进步&#xff0c;彻底改变了人们的工作和生活方式。程序员与AI协同工作写代码已成为常态&#xff0c;大模型不仅提高了工作效率&am…