我是 GO 新手,我正试图弄清楚 goroutines 是如何工作的以及如何同步它们。这是我写的一个简单的程序来了解它们:
package main
import (
"fmt"
"sync"
"time"
)
func printAfterDelay(delay time.Duration, message string, wg *sync.WaitGroup) {
time.Sleep(delay)
fmt.Println(message)
wg.Done()
}
func add(a int, b int, chan1 chan int, wg *sync.WaitGroup) {
c := a + b
chan1 <- c
//close(chan1)
wg.Done()
}
func printer(chan1 chan int, wg *sync.WaitGroup) {
for result := range chan1 {
//result := <-chan1
//time.Sleep(2000 * time.Millisecond)
fmt.Println(result)
}
close(chan1)
wg.Done()
}
func main() {
//var wg sync.WaitGroup
wg := &sync.WaitGroup{}
fmt.Println("Start...")
wg.Add(1)
go printAfterDelay(2000*time.Millisecond, "Try", wg)
chan1 := make(chan int)
wg.Add(1)
go add(5, 4, chan1, wg)
wg.Add(1)
go add(3, 1, chan1, wg)
wg.Add(1)
go printer(chan1, wg)
//time.Sleep(3000 * time.Millisecond)
wg.Wait()
fmt.Println("End")
}
add 函数接受两个 int,将它们相加并将结果传递给一个 chan。打印机功能从 chan 获取结果并打印它们。这两个函数在 main() 中作为 goroutines 调用,所以我还传递了一个 WaitGroup 作为指针,它在调用 goroutines 之前递增,并在函数结束时递减。
长风秋雁
Flexbox布局,先码住,还需要深入学习
golaravel.com 已经进入僵尸状态了吗?
关于开始学习golang语言的困惑?
0基础学golang怎么规划好
相关分类