如何使用Golang实现指针与引用_Golang 指针使用与操作实践


指针是存储变量内存地址的变量,通过&取地址、*解引用。Go中用指针实现函数间共享修改数据,避免大对象复制,new(T)返回T类型零值指针,make仅用于slice、map、channel初始化,解引用nil指针会panic,函数常返回指针+error需判空处理。

如何使用golang实现指针与引用_golang 指针使用与操作实践

在 Golang 中,指针和引用是操作变量内存地址的核心机制。虽然 Go 是一门高级语言,隐藏了许多底层细节,但理解指针对于编写高效、灵活的代码至关重要。本文将直接切入重点,讲解如何在实际开发中正确使用指针与引用。

什么是指针?

指针是一个变量,它存储另一个变量的内存地址。通过指针,可以直接读取或修改该地址上的值。在 Go 中,使用 & 获取变量地址,使用 * 解引用访问值。

示例:

name := "Alice"<br>
  ptr := &name                    // ptr 是 *string 类型,保存 name 的地址<br>
  fmt.Println(ptr)               // 输出类似 0xc000010230(地址)<br>
  fmt.Println(*ptr)              // 输出 Alice(解引用)

改变指针指向的值会影响原始变量:

*ptr = "Bob"<br>
  fmt.Println(name)              // 输出 Bob

函数中使用指针传递

Go 默认按值传递参数,这意味着函数接收到的是原始数据的副本。如果想在函数内部修改原变量,必须传入指针。

场景:交换两个整数

func swap(a, b *int) {<br>
    *a, *b = *b, *a<br>
  }

x, y := 10, 20<br>
  swap(&x, &y)<br>
  fmt.Println(x, y) // 输出 20 10

结构体常配合指针使用,避免复制大对象:

type Person struct {<br>
    Name string<br>
    Age  int<br>
  }

func (p *Person) SetName(newName string) {<br>
    p.Name = newName<br>
  }

p *Person 表示该方法作用于指针类型,可修改原结构体。

new 与 make 的区别

new(T) 用于创建任意类型的零值,并返回其指针:

numPtr := new(int)<br>
  *numPtr = 42<br>
  fmt.Println(*numPtr) // 输出 42

make(T) 仅用于 slice、map 和 channel,初始化后返回类型本身(非指针),但其底层数据是引用类型。

GPT-MINUS1 GPT-MINUS1

通过在文本中随机地用同义词替换单词来愚弄GPT

GPT-MINUS1 153 查看详情 GPT-MINUS1

错误用法:mptr := make(*map[string]int) ❌ 不支持

正确方式:m := make(map[string]int) ✅ 返回的就是可用的 map

nil 指针与安全检查

未初始化的指针为 nil。解引用 nil 指针会引发 panic。

var p *int<br>
  if p != nil {<br>
    fmt.Println(*p)<br>
  } else {<br>
    fmt.Println("指针为空")<br>
  }

常见模式:函数返回可能失败时返回指针 + error:

func findUser(id int) (*User, error) {<br>
    if id == 1 {<br>
      user := User{Name: "Tom"}<br>
      return &user, nil<br>
    }<br>
    return nil, fmt.Errorf("用户不存在")<br>
  }

调用时需判断是否为 nil:

u, err := findUser(99)<br>
  if err != nil || u == nil {<br>
    log.Println(err)<br>
    return<br>
  }<br>
  fmt.Println(u.Name)

基本上就这些。掌握指针的关键在于理解何时需要共享或修改数据,以及避免不必要的拷贝。不复杂但容易忽略。

以上就是如何使用Golang实现指针与引用_Golang 指针使用与操作实践的详细内容,更多请关注其它相关文章!


# 可以直接  # 网站建设的项目作业  # 2017seo入门书籍  # 天河seo优化账户托管  # 品牌年度营销推广规划书  # 鹤壁网站推广哪里的好  # 网站产品页怎么优化  # 沭阳网站推广公司有哪些  # 邯郸网站制作与建设  # 重庆seo公司有哪些  # 威海网站优化电话  # 解决问题  # go  # 不存在  # 中文网  # 相关文章  # 如何在  # 是一个  # 的是  # 布尔  # 如何使用  # 区别  # golang 


相关栏目: 【 Google疑问12 】 【 Facebook疑问10 】 【 优化推广96088 】 【 技术知识133117 】 【 IDC资讯59369 】 【 网络运营7196 】 【 IT资讯61894


相关推荐: mysql如何限制远程访问_mysql远程访问限制方法  《下一站江湖2》大雪山加入方法  漫蛙漫画直连入口 _ manwa官方备用入口实时检测  VS Code源代码管理(SCM)视图的进阶使用技巧  百度网盘如何设置上传限额  《健康大兴》注册方法介绍  漫蛙漫画官方版直通入口 2025漫蛙漫画免注册访问说明  邮政快递寄件查询入口 邮政快递收件查询入口  Python模块化编程:避免循环导入与共享函数的最佳实践  在J*a中如何实现在线问答与评分系统_问答评分项目开发方法说明  咸鱼怎么设置仅粉丝可见的动态_咸鱼动态粉丝可见设置方法  Python中安全地将环境变量转换为整数的类型注解指南  Lar*el Eloquent中通过Join查询关联数据表:解决多行子查询问题  iPhone16Plus参数配置如何调整声音_iPhone16Plus参数配置声音调整详细方法  Scipy Sparse CSR 矩阵非零元素行级遍历的最佳实践  Lar*el 关联查询:同时筛选父表与子表数据的高效策略  服装短视频如何起号推广?服装短视频起号推广有什么要求?  Highcharts雷达图轴线交点数值标注指南  韩剧圈正版官网入口_韩剧圈官方指定登录  自定义你的VS Code状态栏,监控关键信息  解决 Vue 3 组件未定义错误:理解 createApp 与根组件的正确使用  《爱笔思画x》涂色教程  我的世界官方网址入口 我的世界游戏主页直达入口  J*aScript二进制处理_ArrayBuffer与Blob  奥克斯空调不制热啥毛病_奥克斯空调不制热原因分析及解决技巧  修复UI元素交互障碍:从“开始”按钮到信息框的平滑过渡实现  批改网网页版登录 批改网电脑版学生登录入口  微信网页版在线登录 微信网页版在线使用入口  Cassandra中复合主键、二级索引与ORDER BY排序的限制与解决方案  Go语言反射机制下访问嵌入结构体中的被遮蔽方法  菜鸟驿站的取件码忘了怎么办 手机快速查询指南  如何外贸网站设计-能留住客户提升用户体验!  Go语言中方法与接收器:指针和值类型的调用机制详解  鲁班大师乓乓皮肤获取方法  苹果电脑如何快速截图并编辑 苹果电脑截屏标注快捷操作  《360浏览器》设置摄像头权限方法  知乎APP怎么查看自己被邀请的问题_知乎APP邀请回答记录查看与参与方法  胃动力不足?试试这5个调理方法  韩小圈网页版PC端入口 韩小圈网页版官方网站入口  wps文字怎么设置文字环绕图片的方式_wps文字如何设置文字环绕图片方式  CSS动画如何实现图标旋转并放大_transform rotate scale @keyframes实现  C++中std::thread和std::async的区别_C++并发编程与线程与异步任务比较  PHP使用DOMDocument与XPath精准追加XML元素教程  狙击外星人小游戏在线链接_狙击外星人小游戏网页链接  抖音如何进行蓝V认证 抖音企业号申请所需资料与流程  Excel如何设置动态下拉菜单_Excel表格下拉选项快速方法  动漫之家观看全集库 动漫之家免费资源网地址  PPT智能排版生成入口 免费PPT内容自动生成平台  广州地铁app准妈咪徽章领取方法  如何在CSS中使用伪类选择器_hover实现悬停效果 

 2025-11-25

了解您产品搜索量及市场趋势,制定营销计划

同行竞争及网站分析保障您的广告效果

点击免费数据支持

提交您的需求,1小时内享受我们的专业解答。

运城市盐湖区信雨科技有限公司


运城市盐湖区信雨科技有限公司

运城市盐湖区信雨科技有限公司是一家深耕海外推广领域十年的专业服务商,作为谷歌推广与Facebook广告全球合作伙伴,聚焦外贸企业出海痛点,以数字化营销为核心,提供一站式海外营销解决方案。公司凭借十年行业沉淀与平台官方资源加持,打破传统外贸获客壁垒,助力企业高效开拓全球市场,成为中小企业出海的可靠合作伙伴。

 8156699

 13765294890

 8156699@qq.com

Notice

We and selected third parties use cookies or similar technologies for technical purposes and, with your consent, for other purposes as specified in the cookie policy.
You can consent to the use of such technologies by closing this notice, by interacting with any link or button outside of this notice or by continuing to browse otherwise.