golang中的map和channel的赋值都是引用传递?

ddxx11223 · 2017-12-07 12:19:02 · 3093 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2017-12-07 12:19:02 的主题,其中的信息可能已经有所发展或是发生改变。

RT。
Slice的赋值其实看似是引用,实则是拷贝,只是它们内部指向了同一块内存区域而已,这个map和channel的赋值不知道内部是怎么做的?纯引用?
那如果我希望是拷贝,而不是引用,该怎么破?


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

3093 次点击  
加入收藏 微博
4 回复  |  直到 2017-12-11 01:55:08
channel
channel · #1 · 7年之前

这三者其实区别不大的

ddxx11223
ddxx11223 · #2 · 7年之前
channelchannel #1 回复

这三者其实区别不大的

slice的话,如果扩容了,会再开辟一段内存存放数据。那channel呢,如何使它们互相赋值时是完全拷贝(包括内部元素),而非指向同一块内存

channel
channel · #3 · 7年之前

这是创建 channel 的源码。

func makechan(t *chantype, size int64) *hchan

可见其实是一个指针。

相关定义在 http://docs.studygolang.com/src/runtime/chan.go#L62

ddxx11223
ddxx11223 · #4 · 7年之前
channelchannel #3 回复

这是创建 channel 的源码。 ```go func makechan(t *chantype, size int64) *hchan ``` 可见其实是一个指针。 相关定义在 http://docs.studygolang.com/src/runtime/chan.go#L62

嗯,谢谢回答。后来发现可以用go内置的copy函数对channel进行复制

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传