Зачем выбирать заявление в GoLang - PullRequest
0 голосов
/ 04 марта 2019

Я учусь Go и вот в этом примере , я вижу, что оператор select позволяет goroutine ждать нескольких операций связи

Нам действительно нужен selectзаявление ?Мой ниже делает то же самое без оператора select

func runForChannel1(channel1 chan string) {
    time.Sleep(1 * time.Second)
    channel1 <- "Hi Arun ... I am Channel-1"
}

func runForChannel2(channel2 chan string) {
    time.Sleep(2 * time.Second)
    channel2 <- "Hi Arun ... I am Channel-2"
}

func testSelect() {
    channel1 := make(chan string)
    channel2 := make(chan string)

    go runForChannel1(channel1)
    go runForChannel2(channel2)

    chval1, chval2 := <-channel1, <-channel2
    fmt.Println(chval1, chval2)

}

func main() {
    testSelect()
}

Без учета select я смог дождаться, пока оба канала получат свои значения ... Зачем нам нужен оператор Select?Может кто-нибудь научить меня, пожалуйста?

1 Ответ

0 голосов
/ 04 марта 2019

Действительно ли нам нужно выражение select?

Да.Ни один пользовательский код не может выбрать точно одну из нескольких возможных операций канала, если несколько из них могут быть выполнены, или ни одного (по умолчанию), если ни один случай не готов.

(Ваш код делает что-то совершенно другое).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...