code: func timeoutAndMoveOn(fp loiterFunc, timeout time.Duration) {
  	ch := time.After(timeout)
  	for {
  		select {
  		case <-ch:
  			return
  		default:
  			fp()
  		}
  	}
  }
docs: // timeoutAndMoveOn executes the long running function pointed to by 'fp' and
  // times out after 'timeout' duration.