goroutine使用方便,但是如果不加以处理一般会deadlock,因为goroutine配合Chanel的话只能是一进一出,否则就会卡在那里。下面一个示例就是利用这个WaitGroup处理这种死锁。

写之前有个小地方,就是关于chan单向双向的问题。如果是我们定义了一个双向chan,它是可以传给单向chan的,反之则不可以。如果无特殊要求,我个人觉得单向chan只是在代码阅读上更准确。

    var ch1 <-chan string    这个ch1就是只能写数据,比如 a := <-ch1
var ch2 chan<- string   这个ch2只能接受数据,比如 ch2 <- "aaa"

示例

package main

import "sync"

type User struct {
Name string
}
func main() {
result := make(chan *User)
var waitGroup sync.WaitGroup
var users []*User for i := ; i < ; i++ {
users = append(users, &User{Name: "test"})
}

  // 为100个goroutine在group中开辟“通道”
waitGroup.Add(len(users))
for _, feed := range users {
go func(*User) {
AddUser(feed, result)
        // 每个goroutine完成工作后关闭一个
waitGroup.Done()
}(feed)
} go func() {
    // 当还未全Done时,这里会堵塞住
waitGroup.Wait()
close(result)
}() for res := range result {
println(res.Name)
} } func AddUser(feed *User, res chan<- *User) {
res <- feed
}

这里输出100个test

最新文章

  1. 学C#之设计模式系列笔记(1)策略模式
  2. SSM框架-----------SpringMVC+Spring+Mybatis框架整合详细教程
  3. sql存在一个表而不在另一个表中的数据
  4. 【Winform】 Enum逆向解析
  5. ArrayList LinkedList Vector
  6. icon font
  7. 转:SCHEME 语言是怎么来的 -1
  8. STL源代码剖析 读书总结
  9. 8086 CPU 寻址方式
  10. hdu_2141_Can you find it?(二分)
  11. [原创]CentOS下Radius服务器搭建
  12. Django将request对象传入模板配置
  13. Android实战之ListView复选框
  14. Spark内核
  15. @Autowired Map&lt;String , Object&gt; xx
  16. WIFI底座
  17. Java_9 面向对象
  18. Android Studio 学习笔记(1)
  19. 百度地图出现UnsatisfiedLinkError: Native method not found: com.baidu...
  20. Mac 10.12安装图片标注工具PxCook

热门文章

  1. python中的while
  2. 通过web页面修改nginx配置
  3. 【转】docker配置参数详解---/etc/docker/daemon.json完整参数
  4. scipy1.3.0开始被弃用的imread,imresize,如何代替
  5. No space left on device(总结)
  6. 安卓开发:初步了解布局文件layout
  7. C:数值溢出问题
  8. MAC系统 - 基础知识
  9. 【转】jenkins_pipeline语法详解
  10. Android 调用系统Email发送带多附件的邮件