1. channel 元素值为切片

package mainimport ("fmt"
)func main() {ch := make(chan []int, 3)s := []int{1, 3, 4}ch <- sfmt.Printf("s length is %d, cap is %d\n", len(ch), cap(ch))fmt.Printf("s address is %p\n", &s)r := <-chr[0] = 2// 证明了channel的复制是浅拷贝fmt.Printf("s is %#v\n", s)fmt.Printf("r is %#v\n", r)fmt.Printf("r address is %p\n", &r)}

运行结果:

s length is 1, cap is 3
s address is 0xc00000c060
s is []int{2, 3, 4}
r is []int{2, 3, 4}
r address is 0xc00000c080

可以看到在接收端修改切片元素值,发送端的切片也被改变。

2. channel 元素值为数组

package mainimport ("fmt"
)func main() {ch := make(chan [3]int, 3)s := [3]int{1, 3, 4}ch <- sfmt.Printf("s length is %d, cap is %d\n", len(ch), cap(ch))fmt.Printf("s address is %p\n", &s)r := <-chr[0] = 2// 证明了channel的复制是浅拷贝fmt.Printf("s is %#v\n", s)fmt.Printf("r is %#v\n", r)fmt.Printf("r address is %p\n", &r)}

输出结果:

s length is 1, cap is 3
s address is 0xc0000aa000
s is [3]int{1, 3, 4}
r is [3]int{2, 3, 4}
r address is 0xc0000aa040

Go 语言里没有深层复制。只有浅复制 。数组是值类型,所以会被完全复制。

浅拷贝只是拷贝值以及值中直接包含的东西,深拷贝就是把所有深层次的结构一并拷贝。

首先你得理解,intfloat32string 以及 []int 这些类型都是值类型。对于值类型来说没有 “深层” 只有 “浅层”。也就是说,这类值只有一层,只包含值本身(不像 mapslice 那样包含了指向底层数据结构的指针)。对这类值的拷贝就是浅拷贝,根本就不存在深拷贝的概念。

浅表复制,只复制元素值,元素值里面再指向的东西就不会复制了。

Golang 元素值在经过通道传递时会被复制,这个复制是浅复制相关推荐

  1. 函数中参数有数组时注意的小问题(不一定要传递数组长度,不用返回数组,可以在函数中改变数组元素值)

    函数中参数有数组时注意的小问题: 1.不一定要传递数组长度 2.不用返回数组,可以在函数中改变数组元素值 通过下面这个小例子来验证: #include<iostream> #include ...

  2. golang 键值对_对Golang地图的一些见解

    golang 键值对 文章是关于地图的内部结构,哈希值和性能的. 数据实际上是如何存储在内部的. 基础概述 地图(又名关联数组)基本上是具有真正快速查找的键值存储. 真正的基本例子: m :=make ...

  3. [Eigen中文文档] 按值将Eigen对象传递给函数

    文档总目录 本文目录 按值传递和按引用传递 Eigen的处理 英文原文(Passing Eigen objects by value to functions) 按值传递和按引用传递 按值传递:传入函 ...

  4. Redis中列表list数据类型(增加(在左侧、右侧或指定元素前后插入数据)、获取(获取表内指定范围的元素)、更新(获取指定索引位置的元素值)、删除(删除指定元素、count))

    列表的元素类型为string 按照插⼊顺序排序 1. 增加 1.1 在左侧插⼊数据 lpush key value1 value2 ... 例1:从键为a1的列表左侧加⼊数据a . b .c lpus ...

  5. 顺序表-顺序表的基本操作(初始化+指定位置元素值 + 用元素值求下标)

    顺序表的存储结构: typedef struct{int data[Maxsize]; //存在顺序表中的元素int length; //存放顺序表的长度}SqList; 一.初始化顺序表算法: vo ...

  6. 顺序表-给定的顺序表L中删除元素值在x到y(x<=y)之间的所有的元素

    顺序表的存储结构: typedef struct{int data[Maxsize]; //存在顺序表中的元素int length; //存放顺序表的长度}SqList; 分析: 这题和删除顺序表所有 ...

  7. 顺序表-删除所有元素值为x结点(另建表存放+复制到原表)

    顺序表的存储结构: typedef struct{int data[Maxsize]; //存在顺序表中的元素int length; //存放顺序表的长度}SqList; 分析: 这里要删除顺序表的所 ...

  8. 顺序表-删除所有元素值为x结点(相等加一,不等前移k)

    顺序表的存储结构: typedef struct{int data[Maxsize]; //存在顺序表中的元素int length; //存放顺序表的长度}SqList; 分析: 这里要删除顺序表的所 ...

  9. OpenCV Python教程(2、图像元素的访问、通道分离与合并)

    OpenCV Python教程之图像元素的访问.通道分离与合并 转载请详细注明原作者及出处,谢谢! 访问像素 像素的访问和访问numpy中ndarray的方法完全一样,灰度图为: [python] v ...

最新文章

  1. Github上传大于100M文件:LFS
  2. leaq c 汇编语言,汇编语言lea指令使用方法解析
  3. 前端抢饭碗系列之Vue项目如何做单元测试
  4. Android 手把手带你玩转自己定义相机
  5. 如何清除tomcat缓存
  6. PL SQL导入导出sql/dmp文件
  7. mysql 5.7 远程端口_ubuntu 16.04 mysql5.7.17 开放远程3306端口
  8. PyTorch实战福利从入门到精通之二——Tensor
  9. LeetCode 面试题 08.01. 三步问题 (动态规划)
  10. C#学习基础---BrowsableAttribute.Browsable属性
  11. SWFUpload控件使用
  12. DEDECMS之九 文章采集
  13. 原因是出现以下错误: 80040154 没有注册类 (异常来自 HRESULT:0x80040154 (REGDB_E_CLASSNOTREG))
  14. mac推箱子c语言,c语言写的推箱子源码,非常适合新手学习
  15. cs6导入库闪退 flash_flash cs6源文件怎么修复,导入老跳出意外格式,我是用flash cs6做的。我还有一半没有导出 swf 呢?...
  16. Postman安装与简单使用
  17. IEEEtran Latex模板五作者排版问题
  18. 双十一不孤单,再过几小时北欧人民也和你一样开始抢单
  19. 与传统计算相比,云计算具有哪些优势?
  20. 大点干!早点散----------深入剖析GFS分布式文件系统

热门文章

  1. Go 学习笔记(64)— Go error.New 创建接口错误对象、fmt.Errorf 创建接口错误对象、errors.Is 和 errors.As
  2. c语言中字符串数组的地址存放以及%s输出单个字符导致程序崩溃的问题
  3. Python 读取文本时的 read/readline/readlines
  4. Apache POI:解决数据库和Excel之间相互转换的烦恼~
  5. TensorFlow Frontend前端
  6. 将TVM集成到PyTorch上
  7. Ascend Pytorch算子功能验证
  8. 图像复原的神经网络稀疏表示
  9. 常用深度学习框——Caffe/TensorFlow / Keras/ PyTorch/MXNet
  10. 摄像头和相机模型和内参原理