如何在Golang中修改值类型数据_使用指针改变变量值
发布时间 - 2026-01-10 00:00:00 点击率:次Go中值类型变量函数内不可修改,须传指针;T声明指针类型,&v取地址,p解引用;struct传值改副本,须传Struct;切片是值类型,append扩容需返回或传[]T。
Go 中值类型变量不能被函数内修改,除非传指针
Go 函数参数是值传递,哪怕传的是 int、string、struct 这类值类型,函数内部拿到的也只是副本。原变量不会变。想改原变量,必须传它的地址——也就是指针。
*T 和 &v 是配对操作:取地址和解引用
声明指针类型用 *T(比如 *int),获取变量地址用 &v,通过指针修改值用 *p = x。漏掉 * 或多写 * 都会编译报错或行为异常。
-
&v返回变量v的内存地址,类型是*T -
*p表示“取指针p指向的值”,可读可写 - 声明指针变量时未初始化,值为
nil;解引用nil指针会 panic
修改 struct 字段必须传结构体指针,否则改的是副本
struct 是值类型,哪怕它很大,传参时也复制整个结构体。常见错误是定义一个修改字段的函数却传了 struct 本身,结果调用
后字段没变。
type User struct {
Name string
Age int
}
func updateUser(u User) { // ❌ 错误:u 是副本
u.Name = "Alice"
u.Age = 30
}
func updateUserPtr(u *User) { // ✅ 正确:u 指向原变量
u.Name = "Alice"
u.Age = 30
}
func main() {
u := User{Name: "Bob", Age: 25}
updateUser(u) // u 不变
updateUserPtr(&u) // u.Name 变成 "Alice"
}
切片、map、channel 是引用类型,但底层数组仍需注意指针语义
切片本身是值类型(含 pointer、len、cap 三个字段),所以传切片不等于传底层数组指针。若函数内做了 append 导致扩容,新底层数组不会反映到原切片上。需要返回新切片或传 *[]T 才能保证修改生效。
- 只修改已有元素(如
s[0] = x):无需指针,因为 pointer 字段指向同一数组 - 追加元素且可能扩容(
append(s, x)):原切片变量不变,必须用返回值或*[]T - 想让函数能重分配底层数组并更新原变量,得传
*[]int,再用*s = append(*s, x)
# go
# golang
# app
# ai
# String
# 结构体
# int
# 指针
# 值类型
# 引用类型
# 指针类型
# Struct
# 值传递
# pointer
# 切片
# len
# cap
# nil
# append
# map
# channel
# 的是
# 还在
# 已有
# 用了
# 这类
# 想让
# 再用
# 报错
# 而你
# 不等于
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Python3.6正式版新特性预览
php嵌入式断网后怎么恢复_php检测网络重连并恢复硬件控制【操作】
PHP正则匹配日期和时间(时间戳转换)的实例代码
Laravel怎么创建控制器Controller_Laravel路由绑定与控制器逻辑编写【指南】
Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】
Laravel事件监听器怎么写_Laravel Event和Listener使用教程
车管所网站制作流程,交警当场开简易程序处罚决定书,在交警网站查询不到怎么办?
企业网站制作这些问题要关注
Swift中循环语句中的转移语句 break 和 continue
🚀拖拽式CMS建站能否实现高效与个性化并存?
如何在Ubuntu系统下快速搭建WordPress个人网站?
*服务器网站为何频现安全漏洞?
Laravel如何实现用户注册和登录?(Auth脚手架指南)
Android自定义控件实现温度旋转按钮效果
Laravel广播系统如何实现实时通信_Laravel Reverb与WebSockets实战教程
Laravel怎么实现验证码(Captcha)功能
ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】
夸克浏览器网页跳转延迟怎么办 夸克浏览器跳转优化
详解Huffman编码算法之Java实现
Laravel怎么导出Excel文件_Laravel Excel插件使用教程
Java垃圾回收器的方法和原理总结
Laravel如何使用Laravel Vite编译前端_Laravel10以上版本前端静态资源管理【教程】
Windows10怎样连接蓝牙设备_Windows10蓝牙连接步骤【教程】
微信小程序 require机制详解及实例代码
如何挑选优质建站一级代理提升网站排名?
详解jQuery停止动画——stop()方法的使用
Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决
免费视频制作网站,更新又快又好的免费电影网站?
如何快速建站并高效导出源代码?
网站制作大概要多少钱一个,做一个平台网站大概多少钱?
网站建设要注意的标准 促进网站用户好感度!
Laravel如何生成API文档?(Swagger/OpenAPI教程)
如何为不同团队 ID 动态生成多个“认领值班”按钮
如何在阿里云通过域名搭建网站?
独立制作一个网站多少钱,建立网站需要花多少钱?
js实现点击每个li节点,都弹出其文本值及修改
Android GridView 滑动条设置一直显示状态(推荐)
免费网站制作appp,免费制作app哪个平台好?
Javascript中的事件循环是如何工作的_如何利用Javascript事件循环优化异步代码?
高性价比服务器租赁——企业级配置与24小时运维服务
Laravel与Inertia.js怎么结合_使用Laravel和Inertia构建现代单页应用
Laravel如何实现密码重置功能_Laravel密码找回与重置流程
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
创业网站制作流程,创业网站可靠吗?
javascript如何操作浏览器历史记录_怎样实现无刷新导航
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
如何快速搭建高效简练网站?
如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?
Laravel如何实现URL美化Slug功能_Laravel使用eloquent-sluggable生成别名【方法】
清除minerd进程的简单方法

