当前位置: 首页 > news >正文

Golang 访问 map 中的结构体字段时如何避免拷贝

在 Go 语言中,map 的值类型是按值传递的,因此当访问 map 中的结构体时,返回的是结构体的副本,无法直接修改原始结构体的字段。为了在不进行拷贝的情况下访问和修改 map 中的结构体字段,我们可以采用以下两种方式:

  • 使用指针。将 map 的值类型改为指向结构体的指针,这样就可以通过指针直接修改结构体字段。
  • 避免直接修改 map 中的值:如果使用值类型,需要在修改时显式地将值取出、修改后再重新赋值回 map。
type Computer struct {CPU intROM intDisk int
}func main() {computers := map[string]Computer{"PC1": {CPU: 4, ROM: 8, Disk: 256},}// 不能直接修改 map 中的结构体字段computers["PC1"].CPU = 8// 获取结构体的副本pc1 := computers["PC1"]// 修改结构体副本的字段,不影响原 map 中的值pc1.CPU = 8
}

为了避免值拷贝的问题,可以将 map 的值类型改为结构体的指针,这样通过键访问 map 时,返回的是结构体的指针,对指针的修改将直接作用于原始的结构体。

type Computer struct {CPU intROM intDisk int
}func main() {// 创建一个 map,其值为指向结构体的指针computers := map[string]*Computer{"PC1": {CPU: 4, ROM: 8, Disk: 256},"PC2": {CPU: 4, ROM: 8, Disk: 256},}// 通过指针直接修改结构体字段computers["PC1"].CPU = 8// 遍历 map 并修改结构体字段for key, computer := range computers {computer.CPU++}
}

也可以取出值,修改后再放回去。

type Computer struct {CPU intROM intDisk int
}func main() {computers := make(map[string]Computer )computers ["PC1"] = Computer{CPU: 4, ROM: 8, Disk: 256}// 显式取出、修改、再赋回 mapcomputer := computers["PC1"]computer.CPU = 8computers["PC1"] = computer
}
http://www.xdnf.cn/news/591373.html

相关文章:

  • 无anaconda搭建yolo11环境
  • 鸿蒙进阶——CMakelist、GN语法简介及三方库通用移植指南
  • 技术篇-2.3.Golang应用场景及开发工具安装
  • 晶振选型三大陷阱:工作温度、电压与负载电容的隐藏矛盾
  • 【AT32】 at32 软复位
  • mssql查询历史执行过的语句日志
  • 提示词工程驱动Mermaid图表生成:技术原理与实战案例
  • 力扣面试150题-- 二叉树展开为链表
  • MYSQL备份与恢复
  • 【灵动Mini-F5265-OB】环境搭建以及按键串口驱动
  • ganache-ui使用
  • OminiScenes代码阅读
  • PyQt学习系列03-动画与过渡效果
  • 【部署】如何离线环境创建docker容器执行python命令行程序
  • 在 LangChain 中集成 Mem0 记忆系统教程
  • 向量数据库及ChromaDB的使用
  • SQL基础概念以及SQL的执行方式
  • YOLO篇-3.1.YOLO服务器运行
  • const修饰指针
  • 【信息系统项目管理师】第15章:项目风险管理 - 55个经典题目及详解
  • 参数化建模(二):避免踩坑!优劣分析与选择诀窍
  • 禅道隐藏版权信息
  • 安装openresty使用nginx+lua,openresty使用jwt解密
  • upload-labs通关笔记-第18关文件上传之条件竞争
  • 数据结构篇--二项队列
  • linux服务器查看端口是否被占用
  • 5月22日复盘-YOLOV5
  • SQLServer与MySQL数据迁移案例解析
  • fscan教程1-存活主机探测与端口扫描
  • Android 添加系统服务的完整流程