TypechoJoeTheme

至尊技术网

登录
用户名
密码
搜索到 1 篇与 的结果
2025-11-20

Go语言中的移动语义:理解值传递与引用语义

Go语言中的移动语义:理解值传递与引用语义
以 slice 为例,一个 slice 的底层结构包含三个部分:指向底层数组的指针、长度和容量。当你将一个 slice 传给函数时,Go 会拷贝这个结构体(通常 24 字节),但并不会拷贝它所指向的底层数组。这意味着函数内部对 slice 元素的修改会影响原数组,因为两者共享同一块内存区域。表面上看像是“引用传递”,实质上仍是“值传递”,只不过传递的是一个轻量级的“句柄”。类似地,map 和 channel 在语言层面也表现为“引用语义”,但其本质依然是值传递。map 变量本身是一个指向运行时 map 结构的指针,channel 也是如此。因此,复制 map 变量只是复制了指针,而非整个哈希表内容。这使得它们在函数间传递非常高效,几乎无额外开销。相比之下,结构体(struct)的行为则更直观地体现了值传递的特点。默认情况下,结构体在赋值或传参时会被完整拷贝。如果结构体较大(例如包含多个字段或大数组),这种拷贝可能带来显著的性能损耗。此时,开发者通常会显式使用指针来避免复制:go type User struct { Name string Age int ...
2025年11月20日
38 阅读
0 评论

人生倒计时

今日已经过去小时
这周已经过去
本月已经过去
今年已经过去个月

最新回复

  1. 强强强
    2025-04-07
  2. jesse
    2025-01-16
  3. sowxkkxwwk
    2024-11-20
  4. zpzscldkea
    2024-11-20
  5. bruvoaaiju
    2024-11-14

标签云