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

在 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,初始化后返回类型本身(非指针),但其底层数据是引用类型。
美图云修
商业级AI影像处理工具
50
查看详情
错误用法: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 指针使用与操作实践的详细内容,更多请关注其它相关文章!
# 正则表达式
# 泰州网站建设经验
# 黄山外贸网站推广建设
# 常熟大型网站建设哪家好
# 搜索引擎如何推广网站
# 兴山宜昌网站建设咨询
# seo发外链工作
# SEO网站系统人群
# 网站推广渠道公司
# 陌陌网络营销推广的现状
# seo贴吧发帖
# 解决问题
# go
# 可以直接
# 不存在
# 中文网
# 相关文章
# 是一个
# 的是
# 如何使用
# 美图
# 区别
# golang
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Windows10怎么开启夜间模式 Windows10系统设置调整色温与亮度缓解夜间用眼疲劳【教程】
支付宝如何设置安全保护_支付宝安全设置的全面教程
深入理解J*aScript中的B样条曲线与节点向量生成
使用J*aScript检测输入元素是否包含在特定类中
vivo手机参数配置怎么增强信号_vivo手机参数配置信号增强方法
Mac怎么使用表情符号_Mac Emoji快捷键面板
PowerPoint如何制作滚动字幕结尾彩蛋_PowerPoint路径动画实现平滑滚动字幕效果
支付宝如何管理隐私设置_支付宝隐私保护的配置技巧
C++如何检测键盘输入_C++ _kbhit与_getch函数非阻塞输入
如何创建独立于主系统的J*a运行环境_隔离式环境搭建策略
Linux如何排查内存不足OOME问题_LinuxOOM分析教程
b站怎么删除评论_b站评论管理与删除操作
Go语言JSON解析深度指南:动态访问与结构体映射实践
192.168.1.1管理中心入口 192.168.1.1路由器网页设置平台
美团外卖商家服务中心入口 美团商家版官网入口
浏览器打开即用 美图秀秀网页版入口
Composer的 "licenses" 命令如何帮助你遵守开源协议_检查项目依赖的许可证合规性
WordPress插件开发:正确注册卸载钩子与避免常见陷阱
Win10系统怎么查看已安装更新_Win10卸载有问题的更新补丁
Android Studio计算器C键逻辑错误排查与修复:条件判断优化指南
极速漫画官方主页网址 极速漫画漫画在线浏览官网链接
抖音从哪里进入网页版_抖音官方入口链接
C++的std::mdspan是什么_C++23中用于操作多维数组的非拥有视图
J*aScript中管理异步API调用:确保操作顺序与数据一致性
深入理解与实现最大堆的Heapify过程:常见错误与修正
微信商城在哪里打开【步骤】
如何在CSS中使用visited与link控制链接颜色_visited link伪类配合
Go语言HTML解析:利用Goquery精准获取指定元素内容
React Hooks最佳实践:动态组件状态管理的组件化方案
Go调试环境为何无法启动_Go调试器启动失败原因与解决策略
如何在更新Composer依赖后自动运行测试_使用post-update-cmd钩子触发PHPUnit
基于动态规划的房屋花卉种植最小成本算法详解
如何优雅地扩展SprykerGlue后端API授权逻辑,使用spryker/glue-backend-api-application-authorization-connector-extension
CSS Flexbox如何实现多行排列_flex-wrap wrap自动换行显示
深入理解J*a合成构造器:何时以及为何阻止其生成
vivo手机互传视频怎么操作_vivo手机互传视频详细传输方法
J*aScript动态修改指定div内所有a标签样式指南
C++如何使用AddressSanitizer(ASan)_C++调试工具中检测内存访问错误的利器
千牛数据看板网页版_千牛数据看板网页版访问方法
4399体育竞技小游戏_4399小游戏赛事入口
J*aScript map 方法中处理循环元素为空数组的策略
Log4j Console Appender性能瓶颈与高并发优化策略
蛙漫官方正版入口 蛙漫网页在线全集免费观看
12306选座怎么选到临时改签座_12306改签选座策略与步骤
使用Pandas转换并合并DataFrame:多列映射至统一结构
UC浏览器官网入口2025最新 UC浏览器网页版正式地址
厨房不锈钢水槽发黑生锈怎么处理_水槽用可乐+锡纸2分钟抛亮如新
腾讯QQ邮箱登录入口_QQ邮箱官方网站使用地址
Yandex免登录官网入口_俄罗斯Yandex搜索引擎直达链接
解决 Express.js 中 PUT 请求密码修改失败的路由配置指南


2025-11-25
浏览次数:次
返回列表
}