Yami Odymel https://invade.tw/ says to OwO
/go@mmis_js_bot package main import ( "fmt" "strconv" ) func main() { // 建立「完成」頻道,容量能夠容納所有迴圈的訊息。 done := make(chan bool, 100*100) // 建立「全部都已完成」頻道。 allDone := 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) } }() // 用來偵測所有迴圈是否結束的迴圈。 go func(done chan bool) { // 無限執行的迴圈,不斷地偵測頻道是否已滿。 for { // 如果完成頻道全滿,就表示所有迴圈都已經完成了。 if len(done) == cap(done) { allDone <- true } } }(done) // 除非「完成」頻道接收到任何訊息,否則卡在這裡。 <-done fmt.Println("All done!") }