GO語言面試題目,使用3個協程按照順序從1打印到100
稍微把題目拓展了下,使用N個協程 打印M個數,應該很好理解,創建一個N個協程的列表,然后每打印一個數,就傳到下一個chan中,一次循環
package mainimport ("fmt""sync"
)func printNum(index int, chanNums []chan int, wg *sync.WaitGroup, maxNum int, numGoruntine int) {for {num := <-chanNums[index]if num <= maxNum {fmt.Println("current goruntine num: ", index, num)}if num < maxNum {chanNums[(index+1)%numGoruntine] <- (num + 1)}if num+numGoruntine > maxNum {break}}wg.Done()
}func printNums(maxNum int, numGoruntine int) {var chanList []chan intvar wg sync.WaitGroupwg.Add(numGoruntine)for i := 0; i < numGoruntine; i++ {chanList = append(chanList, make(chan int))}for i := 0; i < numGoruntine; i++ {go printNum(i, chanList, &wg, maxNum, numGoruntine)}chanList[0] <- 1fmt.Println("done")wg.Wait()}
func main() {printNums(100, 3)
}