如何在 Go 方法中正确修改切片类型

Go 中切片是引用类型但本身按值传递,若要在方法内修改原始切片,必须使用指针接收者并直接赋值给解引用后的接收者(test = append(test, x)),而非重新赋值指针变量。 go 中切片是引用类型但本身按值传递,若要在方法内修改原始切片,必须使用指针接收者并直接赋值给解引用后的接收者(*test = append(*test, x)),而非重新赋值指针变量。在 Go 语言中,切片(slice)底层由指向底层数组的指针、长度(len)和容量(cap)三部分构成。虽然切片"引用"底层数组,但切片头(slice header)本身是值类型------当以值接收者调用方法时,传入的是该切片头的副本;对副本的 append 操作只会修改副本,原切片不受影响。? 常见错误:值接收者无法修改原始切片type Test \[\]stringfunc (test Test) Add(str string) { test = append(test, str) // 修改的是 test 的副本,main 中的 test 不变}func main() { t := Test{} t.Add("value") fmt.Println(len(t)) // 输出:0 ------ 未生效}此处 test 是 Test 类型的副本,append 后重新赋值给该副本,对原始变量无任何影响。? 错误进阶:指针接收者但误改指针地址func (test *Test) Add(str string) { v := append(*test, str) test = &v // 错误!test 是指针变量,&v 创建新地址并赋给局部指针变量}test = &v 只改变了方法内 test 指针变量所指向的地址,而调用方传入的指针(如 &t)并未被更新,因此原始切片仍保持不变。? 正确做法:通过解引用赋值更新底层数组与头信息要真正扩展原始切片,需将 append 的结果写回指针所指向的原始内存位置: JoinMC智能客服 JoinMC智能客服,帮您熬夜加班,7X24小时全天候智能回复用户消息,自动维护媒体主页,全平台渠道集成管理,电商物流平台一键绑定,让您出海轻松无忧!

相关推荐
2601_966949651 小时前
如何根据研究的起止时间截取分钟级行情?Python 实战与 QuantDash 数据处理指南
开发语言·python·pandas·量化交易·1024程序员节·股票数据·quantdash
程序员清风4 小时前
数据处理脚本工程化:日志、配置、命令行与测试
服务器·开发语言·数据库
正在走向自律4 小时前
数据集成产品的技术底座:从日志解析原理到 KFS 同步链路搭建(含建表与增删改查完整代码)
数据库·oracle·信创·数据集成·国产数据库·kingbasees·全量+增量同步
程序员塔塔喵4 小时前
【MySQL篇|第七篇】MySQL事务
数据库·mysql·mysql事务
在世修行5 小时前
智学文枢:页面切换与跨页数据预填
python·桌面应用·signal·1024程序员节·pyside·跨页跳转·状态预填
2601_962885725 小时前
如何用 Python 把 K 线重采样成任意周期?
开发语言·python
独隅5 小时前
Claude API 实战教程:从入门到完整项目
android·java·数据库·claude·claude code
打工仔折腾 AI5 小时前
在 Ubuntu ARM64 部署 Q1 V3.0 MuJoCo 模型:加载、单步推理与执行器响应解析
linux·运维·人工智能·python·深度学习·ubuntu·性能优化
_孤傲_6 小时前
快速掌握 MySQL 语法
数据库·后端·mysql
信誓旦旦的程序猿6 小时前
【Python量化实战宝典 #21】北向资金跟随手册:聪明钱择时信号(Python 可跑)
python·1024程序员节·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口