方式1

    timeOut1.go 的第一部分显示如下代码:

    timeOut1.go 第二段代码如下:

    的第三段包含如下代码:

    time.After() 函数调用的目地是等待指定时间。这个例子中,您不用关心 time.After() 返回的实际值,但实际上 time.After() 函数调用介绍意味着超时了。例子中由于 time.After() 函数指定的值小于上节以 goroutine 方式执行的 time.Sleep() 调用中使用的值,您极有可能得到一个超时信息。

    上面这段代码执行一个 goroutine 并使用 time.After(4 * time.Second) 定义了一个 4 秒的超时期限,由于 time.Sleep() 的调用,这个goroutine 将执行大约 3 秒。如果 time.After(4 * time.Second) 调用的返回在您从 select 块的第一个分支里的 c2 channel 获得值之后,那么就不会超时;否则,将超时!然而,在这个例子中,time.After() 调用的值提供了足够的时间对于 调用的返回,因此您极可能不会得到一个超时信息。

    执行 timeOut1.go 产生如下输出: