新闻中心
Golang值类型在函数中如何表现_Golang内存复制行为示例讲解
Go中值类型函数传参会复制副本,修改不影响原变量;结构体同理;需改用指针传参才能修改原始值,且更高效。

在 Go 语言中,值类型(如 int、float64、bool、struct 等)在函数传参时会进行内存复制。这意味着函数接收到的是原始数据的副本,对参数的修改不会影响原始变量。这种行为源于 Go 的“按值传递”机制。
值类型的传参是复制
当一个值类型变量作为参数传递给函数时,Go 会在栈上创建该变量的一个完整拷贝。函数内部操作的是这个拷贝,原变量不受影响。
示例:
package main
<p>import "fmt"</p>
<div class="aritcle_card">
<a class="aritcle_card_img" href="/ai/2123">
<img src="https://img.php.cn/upload/ai_manual/000/000/000/175680155868302.png" alt="Picit AI">
</a>
<div class="aritcle_card_info">
<a href="/ai/2123">Picit AI</a>
<p>免费AI图片编辑器、滤镜与设计工具</p>
<div class="">
<img src="/static/images/card_xiazai.png" alt="Picit AI">
<span>195</span>
</div>
</div>
<a href="/ai/2123" class="aritcle_card_btn">
<span>查看详情</span>
<img src="/static/images/cardxiayige-3.png" alt="Picit AI">
</a>
</div>
<p>func modifyValue(x int) {
x = x * 2
fmt.Println("函数内 x =", x) // 输出:函数内 x = 20
}</p><p>func main() {
a := 10
modifyValue(a)
fmt.Println("main 中 a =", a) // 输出:main 中 a = 10
}
尽管 x 在函数中被修改为 20,但 a 的值仍然是 10,因为传入的是副本。
结构体也是值复制
结构体是典型的值类型。如果将结构体传入函数,整个结构体都会被复制一份。
示例:
package main
<p>import "fmt"</p><p>type Person struct {
Name string
Age int
}</p><p>func updatePerson(p Person) {
p.Age += 1
p.Name = "Updated"
fmt.Printf("函数内: %+v\n", p)
}</p><p>func main() {
person := Person{Name: "Alice", Age: 30}
updatePerson(person)
fmt.Printf("main 中: %+v\n", person) // Age 仍为 30, Name 仍为 "Alice"
}
即使函数中修改了字段,原始结构体未受影响。每次调用都涉及字段级别的内存复制。
如何避免复制?使用指针
若希望函数能修改原始值,应传递指针。指针本身是值,但指向同一块内存地址。
修改上例使用指针:
func updatePerson(p *Person) {
p.Age += 1
p.Name = "Updated"
}
<p>func main() {
person := Person{Name: "Alice", Age: 30}
updatePerson(&person)
fmt.Printf("main 中: %+v\n", person) // 输出修改后的值
}
此时函数操作的是原始结构体的内存位置,修改生效。指针传递只复制地址(通常是 8 字节),大幅减少开销,尤其对大型结构体。
值复制的性能考虑
小类型(如 int、bool)复制成本低,无需担心。但大结构体频繁复制会影响性能和内存占用。
- 复制行为发生在栈上,速度快但仍有代价
- 深层嵌套结构体也会逐字段复制
- 数组(非 slice)也是值类型,同样被复制
建议:对于大对象,优先使用指针传参以避免不必要的内存开销。
基本上就这些。理解值类型的复制行为,有助于写出更高效、预期一致的 Go 代码。不复杂但容易忽略。
以上就是Golang值类型在函数中如何表现_Golang内存复制行为示例讲解的详细内容,更多请关注其它相关文章!
# 相关文章
# 网站建设安全管理
# 马鞍山网站推广价位多少
# seo优化难吗
# 云浮手机网站推广
# 网络营销推广先销后付
# 小伙营销推广文案搞笑
# 医疗网站优化方案
# 网站在哪里优化呢
# 抖音搜索SEO哪家好
# 文章如何进行seo
# 中文网
# 不受
# go
# 会在
# 也会
# 仍为
# 滤镜
# 布尔
# 转换为
# 的是
# 内存占用
# ai
# 栈
# 字节
# golang
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
天猫双十一预售商品怎么退款_天猫双十一预售退款操作指南
QQ邮箱网页版快速登录 QQ邮箱邮箱账号官方入口地址
LINUX的I/O重定向是什么_深入理解LINUX中 >、>> 与 < 的区别
Lar*el递归关系中排除子孙节点的策略
Win10如何开启蓝牙功能_Windows10找不到蓝牙开关解决方法
如何在 Windows 11 中启动游戏手柄设置
抖音DOU+怎么投最有效 抖音付费推广的ROI提升技巧
Golang并发任务中错误如何聚合_Golang goroutine error收集方式
html怎么运行外部js文件中的函数_运html外js文件函数法【技巧】
微信网页版官方入口教程 微信网页版网页版快速登录步骤
印象笔记如何设提醒任务防漏执行_印象笔记设提醒任务防漏执行【任务提醒】
Win10系统服务哪些可以禁用 Win10安全优化服务列表【干货】
Python实时数据流中的动态最值查找策略
创客贴用户入口官网登录 创客贴网页版电脑版系统
如何优雅地解决Livewire文件上传难题?SpatieLivewireFilepond让一切变得简单
QQ邮箱官网登录入口 QQ邮箱网页版邮箱快速登录
学习通在线学习平台 学习通网页版直接进入课程中心
J*aScript类型检查_j*ascript代码规范
我的世界mc.js免费游戏直接能玩 我的世界mc.js小游戏免费秒玩入口
不同用户不同价格! 索尼开启账户个性化定价测试
css子元素高度不一致导致布局错位怎么办_使用align-items:stretch解决高度差异
yy漫画网页版官方入口_yy漫画官网登录页面链接
在FastAPI中利用lifespan与依赖注入高效管理Redis连接池
PDF文件体积过大处理_PDF压缩技巧详解
漫蛙2(台版)官方入口地址 漫蛙2(台版)正版漫画网页端
微博网页版怎么开启两步验证_微博网页版账号安全两步验证设置方法
谷歌浏览器浏览体验优化_谷歌浏览器新版直连永久可用提示
解决Python logging 中 datefmt 导致时间戳固定不变的问题
Kafka Streams中基于消息头条件过滤消息的实现指南
Composer的 "conflict" 字段有什么用_如何声明不兼容的包以避免依赖冲突
蛙漫画网页版全站入口 蛙漫热门作品免费浏览
Win11蓝牙耳机断连怎么解决 Win11蓝牙设置重新配对与驱动更新【技巧】
快手极速版在线观看 官方网页版登录地址
俄罗斯方块最新版入口 俄罗斯方块在线玩官网入口
Sublime Text怎么设置垂直标尺_Sublime配置Rulers规范代码长度
顺丰快递查单号物流信息 顺丰快递小程序查询入口
优化HTML表单样式:解决输入框焦点跳动与元素间距问题
苹果手机如何防止被恶意App追踪
Tailwind CSS line-clamp 布局问题解析与修复指南
J*aScriptWebpack优化_J*aScript构建工具实战
Mac终端命令大全_Mac常用Terminal指令速查
PHP中SSG-WSG API的AES加密实践:正确使用初始化向量
TikTok评论显示延迟如何处理 TikTok评论刷新优化方法
反效果?《战地6》免费试玩开启后玩家数不升反降
Golang如何实现状态模式管理对象状态_Golang State模式实现技巧
机器学习中对数变换预测结果的反向还原
excel如何生成目录 excel一键生成工作表目录超链接
Bilibili动漫最新防封地址发布-Bilibili动漫2025年最稳正版入口推荐
html网页设计源代码怎么运行_运行html网页设计源代码步骤【指南】
如何创建没有密码的Windows本地账户_跳过微软账户登录的技巧【教程】


2025-12-12
浏览次数:次
返回列表
<span>查看详情</span>
<img src="/static/images/cardxiayige-3.png" alt="Picit AI">
</a>
</div>
<p>func modifyValue(x int) {
x = x * 2
fmt.Println("函数内 x =", x) // 输出:函数内 x = 20
}</p><p>func main() {
a := 10
modifyValue(a)
fmt.Println("main 中 a =", a) // 输出:main 中 a = 10
}