/go@mmis_js_bot package main
import (
"fmt"
"strconv"
)
func main() {
// 建立「完成」頻道。
done := make(chan bool)
// 將迴圈丟到另一個行程執行。
go func() {
// 第一層 Goroutine 迴圈。
for i := 0; i < 100; i++ {
go func(i int) {
// 輸出層數。
fmt.Println(i)
// 將迴圈丟到另一個行程執行。
go func(i int) {
// 第二層 Goroutine
for j := 0; i < 100; i++ {
// 輸出層數。
go func(i, j int) {
fmt.Println(strconv.Itoa(i) + "." + strconv.Itoa(j))
}(i, j)
// 如果是最後的迴圈則發送完成資訊。
if j == 100 {
// 向「完成」頻道發送資訊。
done <- true
}
}
}(i)
}(i)
}
}()
// 除非「完成」頻道接收到任何訊息,否則卡在這裡。
<-done
}