初级会员
  • 第 15488 位会员
  • lyp256
  • lyp256
  • 2018-01-16 06:02:29
  • Offline
  • 20 10

最近发布的主题

    暂无

最近发布的文章

    暂无

最近分享的资源

    暂无

最近发布的项目

    暂无

最近的评论

  • 我是从这本书入门的,并发讲得很好,帮我补了很多这方面知识
  • 试试我的歪招,哈哈 ```go package main import ( "fmt" "time" ) func main() { c1 := make(chan int) c2 := make(chan int) go func() { for i := 1; i <= 10; i++ { <-c1 go func(i int) { fmt.Println(2*i - 1) c2<-1 }(i) } }() go func() { for i := 1; i <= 10; i++ { <-c2 go func(i int) { fmt.Println(2 * i) c1 <- 1 }(i) } }() c1<-1 time.Sleep(3 * time.Second) } ```
  • 关于第3题问题,有一个误区: ![TIM截图20180116060554.png](https://static.studygolang.com/180116/19d1cda62812b08654e95b2c6b08f986.png) `m[v.Name]=&v`这里是把 for range 中v 的地址赋值给m。而在range迭代中 v是分配的一个地址(每次迭代中的v都是一个变量),然后每一次迭代给v赋不同的值,所以map所有的值都指向了 v的地址,而v在for range 迭代中只保留了最后一次迭代的值&{lei 14}(前面的值都被覆盖了),因此value 都是&{lei 14} 下面是证明实验,添加打印了地址语句 ![26.png](https://static.studygolang.com/180116/859fe0eaf1a320400c463c528f9d13d6.png) 实验结果: ![3.png](https://static.studygolang.com/180116/03caf3ec1e3c252f73a98a048bdee480.png)