go语言学习笔记(三)

秒速五厘米 2022-05-14 01:51 351阅读 0赞

并发

1.通过go关键字创建并发任务

  1. package main
  2. func main(){
  3. go println("hello word")
  4. }
  5. package main
  6. func main(){
  7. go println("hello word")
  8. go func (s string){
  9. println(s)
  10. }("hello word")
  11. }

2.与defer一样,goroutine也会因延迟执行而立即计算并复制执行参数。

  1. package main
  2. import "time"
  3. var c int
  4. func counter() int {
  5. c++
  6. return c
  7. }
  8. func main(){
  9. a:= 100
  10. go func(x, y int){
  11. time.Sleep(time.Second)
  12. println("go:",x,y)
  13. }(a, counter())
  14. a+=100
  15. println("main:" , a, counter())
  16. time.Sleep(time.Second*3)
  17. }

结果

  1. main: 200 2
  2. go: 100 1

3.wait 进程退出时不会等待并发任务结束,可用通道channel进行阻塞,最后发出退出信号

  1. package main
  2. import (
  3. "time"
  4. )
  5. func main() {
  6. exit := make(chan struct{})
  7. go func() {
  8. time.Sleep(time.Second)
  9. println("goroutine done.")
  10. close(exit)
  11. }()
  12. println("main...")
  13. <-exit
  14. println("main exit")
  15. }

4.sync.WaitGroup的使用

  1. package main
  2. import (
  3. "sync"
  4. "time"
  5. )
  6. func main() {
  7. var wg sync.WaitGroup
  8. for i:=0;i<10;i++{
  9. wg.Add(1)
  10. go func(id int) {
  11. defer wg.Done()
  12. time.Sleep(time.Second)
  13. println("goroutine", id, "done.")
  14. }(i)
  15. }
  16. println("main...")
  17. wg.Wait()
  18. println("main exit")
  19. }

发表评论

表情:
评论列表 (有 0 条评论,351人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Go语言学习笔记(一)

    Go语言学习笔记(一) 本博客是为了记录在学习Go语言过程中应该需要特别记忆的知识点,以防后续需要查看时可以到博客中查找之前的学习记录。本系列博客内容都来自于人民邮电出版