Это работает , но обычно это плохая идея (тм)
ваши будущие разработчики программного обеспечения будут вас ненавидеть за это
Обратите внимание, если эти циклы не совсемто же самое, тогда приложение будет аварийно завершать работу, когда основная программа будет заблокирована из-за того, что никто не будет писать или читать
package main
import (
"fmt"
)
func main() {
c := make(chan int)
go func() {
for x := 0; x < 5; x++ {
var i int
select {
case c <- 1:
i = <-c
case i = <-c:
c <- 1
}
fmt.Println(" A - Written 1 red ", i)
}
}()
for x := 0; x < 5; x++ {
var i int
select {
case c <- 2:
i = <-c
case i = <-c:
c <- 2
}
fmt.Println(" B - Written 2 red ", i)
}
}
Вывод:
B - Written 2 red 1
A - Written 1 red 2
B - Written 2 red 1
A - Written 1 red 2
B - Written 2 red 1
A - Written 1 red 2
B - Written 2 red 1
A - Written 1 red 2
B - Written 2 red 1
Program exited.