GO语言:超时与非阻塞

180 阅读1分钟
package main

import (
	"fmt"
	"time"
)

func main() {
	a := make(chan bool)
	timeout := make(chan bool)

	go func(isRun chan bool) {
		time.Sleep(time.Second * 10)
		isRun <- true
	}(a)

	go func(isRun chan bool) {
		time.Sleep(time.Second * 5)
		isRun <- true
	}(timeout)

	select {//对于超时的应对
	case <-a:
		fmt.Println("run a")
	case <-timeout:
		fmt.Println("time out")
	}

}
package main

import (
	"fmt"
	"time"
)

func main() {
	messages := make(chan string, 2)

	go func(isRun chan string) {
		time.Sleep(time.Second * 3)
		isRun <- "Tom"
	}(messages)

	messages <- "hello"

	select {//非阻塞,利用default,如果messages里由消息就使用,没有就执行default
	case msg := <-messages:
		fmt.Println("received message:", msg)
	default:
		fmt.Println("no message received")
	}

}