1234567891011121314151617181920212223242526272829 |
- package main
- import (
- "context"
- "fmt"
- "time"
- )
- var timerSinceCtxKey = ctxKey("timerSince")
- func startTimer(d time.Duration) (context.Context, context.CancelFunc) {
- return context.WithTimeout(
- context.WithValue(context.Background(), timerSinceCtxKey, time.Now()),
- d,
- )
- }
- func getTimerSince(ctx context.Context) time.Duration {
- return time.Since(ctx.Value(timerSinceCtxKey).(time.Time))
- }
- func checkTimeout(ctx context.Context) {
- select {
- case <-ctx.Done():
- panic(newError(503, fmt.Sprintf("Timeout after %v", getTimerSince(ctx)), "Timeout"))
- default:
- // Go ahead
- }
- }
|