溫馨提示×

Go中如何使用select遍歷多個(gè)通道

go
小億
83
2024-04-02 20:59:05
欄目: 編程語言

在Go中,可以使用select語句來遍歷多個(gè)通道。select語句可以同時(shí)監(jiān)聽多個(gè)通道的操作,并在其中任意一個(gè)通道準(zhǔn)備就緒時(shí)執(zhí)行相應(yīng)的操作。

下面是一個(gè)使用select語句遍歷多個(gè)通道的示例:

package main

import (
    "fmt"
)

func main() {
    // 創(chuàng)建兩個(gè)通道
    ch1 := make(chan int)
    ch2 := make(chan int)

    // 向第一個(gè)通道發(fā)送數(shù)據(jù)
    go func() {
        for i := 0; i < 5; i++ {
            ch1 <- i
        }
        close(ch1)
    }()

    // 向第二個(gè)通道發(fā)送數(shù)據(jù)
    go func() {
        for i := 100; i < 105; i++ {
            ch2 <- i
        }
        close(ch2)
    }()

    // 遍歷多個(gè)通道
    for {
        select {
        case v, ok := <-ch1:
            if !ok {
                ch1 = nil
            } else {
                fmt.Println("From ch1:", v)
            }
        case v, ok := <-ch2:
            if !ok {
                ch2 = nil
            } else {
                fmt.Println("From ch2:", v)
            }
        }

        // 判斷所有通道是否已關(guān)閉
        if ch1 == nil && ch2 == nil {
            break
        }
    }
}

在上面的示例中,我們創(chuàng)建了兩個(gè)通道ch1ch2,并向每個(gè)通道發(fā)送一些數(shù)據(jù)。然后使用select語句遍歷這兩個(gè)通道,當(dāng)其中任意一個(gè)通道準(zhǔn)備就緒時(shí),我們就從該通道中讀取數(shù)據(jù)并打印出來,直到所有通道都關(guān)閉為止。

0