(18条消息) Go语言自学系列 | golang并发编程之channel的遍历_COCOgsta的博客-CSDN博客



Go语言自学系列 | golang并发编程之channel的遍历

COCOgsta 已于 2022-04-09 20:59:28 修改 35 收藏
分类专栏: 视频学习笔记 文章标签: golang go

视频来源:B站《golang入门到项目实战 [2021最新Go语言教程,没有废话,纯干货!持续更新中...]》

一边学习一边整理老师的课程内容及试验笔记,并与大家分享,侵权即删,谢谢支持!

附上汇总贴:Go语言自学系列 | 汇总_COCOgsta的博客-CSDN博客


方法1 for循环+if判断

  1. 1
    package main
  2. 2
  3. 3
    import (
  4. 4
    "fmt"
  5. 5
    )
  6. 6
  7. 7
    func main() {
  8. 8
    c := make(chan int)
  9. 9
  10. 10
    go func() {
  11. 11
    for i := 0; i < 10; i++ {
  12. 12
    c <- i
  13. 13
    }
  14. 14
    close(c)
  15. 15
    }()
  16. 16
  17. 17
    for {
  18. 18
    if data, ok := <-c; ok {
  19. 19
    fmt.Printf("data: %v\n", data)
  20. 20
    } else {
  21. 21
    break
  22. 22
    }
  23. 23
    }
  24. 24
    }
  25. 25

运行结果

  1. 1
    [Running] go run "d:\SynologyDrive\软件开发\go\golang入门到项目实战\goproject\360duote.com\pro01\test.go"
  2. 2
    data: 0
  3. 3
    data: 1
  4. 4
    data: 2
  5. 5
    data: 3
  6. 6
    data: 4
  7. 7
    data: 5
  8. 8
    data: 6
  9. 9
    data: 7
  10. 10
    data: 8
  11. 11
    data: 9

方法2 for range

  1. 1
    package main
  2. 2
  3. 3
    import (
  4. 4
    "fmt"
  5. 5
    )
  6. 6
  7. 7
    func main() {
  8. 8
    c := make(chan int)
  9. 9
  10. 10
    go func() {
  11. 11
    for i := 0; i < 10; i++ {
  12. 12
    c <- i
  13. 13
    }
  14. 14
    close(c)
  15. 15
    }()
  16. 16
  17. 17
    for v := range c {
  18. 18
    fmt.Printf("v: %v\n", v)
  19. 19
    }
  20. 20
    }
  21. 21

运行结果

  1. 1
    [Running] go run "d:\SynologyDrive\软件开发\go\golang入门到项目实战\goproject\360duote.com\pro01\test.go"
  2. 2
    v: 0
  3. 3
    v: 1
  4. 4
    v: 2
  5. 5
    v: 3
  6. 6
    v: 4
  7. 7
    v: 5
  8. 8
    v: 6
  9. 9
    v: 7
  10. 10
    v: 8
  11. 11
    v: 9

注意:如果通道关闭,读多写少,没有了就是默认值,例如,int就是0,如果没有关闭就会死锁。


yg9538 2022年7月22日 22:48 339 收藏文档