package main
import "fmt"
func main() {
messages := make(chan string)
signals := make(chan bool)
// Netyopiluvchi qabul: agar messages da qiymat bo'lsa — o'sha case ishlaydi,
// bo'lmasa darhol default bajariladi
select {
case msg := <-messages:
fmt.Println("received message", msg)
default:
fmt.Println("no message received")
}
// Netyopiluvchi yuborish: bu yerda messages unbuffered va qabul qiluvchi yo'q,
// shu sabab default ishlaydi
msg := "hi"
select {
case messages <- msg:
fmt.Println("sent message", msg)
default:
fmt.Println("no message sent")
}
// Multi-way netyopiluvchi select: bir nechta case va default
select {
case msg := <-messages:
fmt.Println("received message", msg)
case sig := <-signals:
fmt.Println("received signal", sig)
default:
fmt.Println("no activity")
}
}
Terminalda bajarish:
$ go run non-blocking-channel-operations.go
no message received
no message sent
no activity