这算是chan的Bug吗?求高手解答

wjckiss · · 1566 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

```go package main import ( "fmt" "time" ) type cs struct { Cs []int } var c [4](chan cs) func css(i int) { for { fmt.Println("i:", i, "收到信息", <-c[i]) } } func main() { for i := 0; i < 4; i++ { c[i] = make(chan cs) } for i := 0; i < 4; i++ { go css(i) } go func() { // j := 0 cs := cs{Cs: []int{0, 1, 2, 3, 15, 16, 17, 18}} for i := 0; i < 4; i++ { cs.Cs = append(cs.Cs, i) fmt.Println("i:", i, "发出:", cs) c[i] <- cs cs.Cs = cs.Cs[:3] } }() time.Sleep(time.Second * 10) } ``` <iframe style="border:1px solid" src="https://wide.b3log.org/playground/bb726be3044fa13b82393d67a383f8f8.go" width="99%" height="600"></iframe> 理论题输出: ``` i: 0 发出: {[0 1 2 3 15 16 17 18 0]} i: 1 发出: {[0 1 2 1]} i: 2 发出: {[0 1 2 2]} i: 3 发出: {[0 1 2 3]} i: 3 收到信息 {[0 1 2 3]} i: 0 收到信息 {[0 1 2 3 15 16 17 18 0]} i: 2 收到信息 {[0 1 2 2]} i: 1 收到信息 {[0 1 2 1]} ``` 实际输出: ``` i: 0 发出: {[0 1 2 3 15 16 17 18 0]} i: 1 发出: {[0 1 2 1]} i: 2 发出: {[0 1 2 2]} i: 3 发出: {[0 1 2 3]} i: 3 收到信息 {[0 1 2 3]} i: 0 收到信息 {[0 1 2 3 15 16 17 18 0]} i: 2 收到信息 {[0 1 2 3]} i: 1 收到信息 {[0 1 2 3]} ``` 为什么除了i=0,收到的信息是对的,i=1,i=2,i=3,应该收到的信息都不一样,为什么是一样的,

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

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

1566 次点击  
加入收藏 微博
4 回复  |  直到 2017-04-03 15:18:13
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传