24 lines
509 B
Go
24 lines
509 B
Go
package main
|
||
|
||
import (
|
||
"context"
|
||
"fmt"
|
||
"time"
|
||
)
|
||
|
||
func main() {
|
||
d := time.Now().Add(2000 * time.Millisecond)
|
||
ctx, cancel := context.WithDeadline(context.Background(), d)
|
||
|
||
// 尽管ctx会过期,但在任何情况下调用它的cancel函数都是很好的实践。
|
||
// 如果不这样做,可能会使上下文及其父类存活的时间超过必要的时间。
|
||
defer cancel()
|
||
|
||
select {
|
||
case <-time.After(1 * time.Second):
|
||
fmt.Println("overslept")
|
||
case <-ctx.Done():
|
||
fmt.Println(ctx.Err())
|
||
}
|
||
}
|