昨天玉面飛鷹受傷,今天請月光刑警上場協助.
來看今天的演出陣容:
// hello73
package main
import (
"fmt"
"sync"
)
var wg sync.WaitGroup
func main() {
wg.Add(2)
fmt.Println("Main():建立兩個Goroutine")
go 油達大師()
go 月光刑警()
wg.Wait()
fmt.Println("Main():演出完畢")
}
func 油達大師() {
defer wg.Done()
next:
for i := 1; i < 5000; i++ {
for j := 2; j < i; j++ {
if i%j == 0 {
continue next
}
}
fmt.Printf("油達大師:砍 #%d\n", i)
}
fmt.Println("油達大師:砍好了!")
}
func 月光刑警() {
defer wg.Done()
next:
for i := 1; i < 5000; i++ {
for j := 2; j < i; j++ {
if i%j == 0 {
continue next
}
}
fmt.Printf("月光刑警:飛 #%d\n", i)
}
fmt.Println("月光刑警:溜!")
}
執行過程:
Main():建立兩個Goroutine
油達大師:砍 #1
...
油達大師:砍 #3673
月光刑警:飛 #1
月光刑警:飛 #2
月光刑警:飛 #3
...
月光刑警:飛 #4421
油達大師:砍 #3677
...
油達大師:砍 #4999
油達大師:砍好了!
月光刑警:飛 #4423
...
月光刑警:飛 #4999
月光刑警:溜!
Main():演出完畢
可以看到golang的排程器,在油達大師與月光刑警兩個goroutine之間切換.