timeout.go
func Timeout(check Check, timeout time.Duration) Check {
	return func() error {
		c := make(chan error, 1)
		go func() { c <- check() }()
		select {
		case err := <-c:
			return err
		case <-time.After(timeout):
			return timeoutError(timeout)
		}
	}
}
func Timeout(check Check, timeout time.Duration) Check {
	return func() error {
		c := make(chan error, 1)
		go func() { c <- check() }()
		select {
		case err := <-c:
			return err
		case <-time.After(timeout):
			return timeoutError(timeout)
		}
	}
}
// Timeout adds a timeout to a Check. If the underlying check takes longer than
// the timeout, it returns an error.