Например, если бы у меня было выражение select вроде этого:
ch1 := make(chan string, 1)
ch2 := make(chan string, 1)
ch1 <- "hi"
ch2 <- "bye"
select {
case msg := <-ch1:
if msg == "hi":
ch2 <- msg
case <-ch2:
// do something
}
Есть вероятность, что это заблокируется, поскольку в ch2
уже есть строка. Я предполагаю, что это антипаттерн:
ch1 := make(chan string, 1)
ch2 := make(chan string, 1)
ch1 <- "hi"
ch2 <- "bye"
select {
case msg := <-ch1:
if msg == "hi":
go func() {ch2 <- msg}()
case <-ch2:
// do something
}
Очевидно, что это несколько надумано, но у меня похожая ситуация, когда в моем главном потоке есть оператор выбора для n каналов, а другие процессы добавляют элементы в эти каналы. .