2012年11月01日 星期四

golang 超时 机制实现

超时对于一个程序非常的重要,有时我们需要访问外部的资源,但是要有一个执行时间显示,在go语言中,实现超时非常的优美,那多亏与channels和select. 下面是超时实现代码:
package main

import "time"
import "fmt"

func main() {
	c1 := make(chan string)
	go func() {
		time.Sleep(time.Second * 2)
		c1 < - "result 1"
	}()
	select {
	case res := <-c1:
		fmt.Println(res)
	case <-time.After(time.Second * 1):
		fmt.Println("timeout 1")
	}
	c2 := make(chan string)
	go func() {
		time.Sleep(time.Second * 2)
		c2 <- "result 2"
	}()
	select {
	case res := <-c2:
		fmt.Println(res)
	case <-time.After(time.Second * 3):
		fmt.Println("timeout 2")
	}
}
运行结果
timeout 1
result 2
[Finished in 3.5s]