func ContextInjector(componentName string, handler http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { reqID := req.Header.Get("X-Request-ID") if reqID == "" { reqID = random.UUID() } ctx := ctxhelper.NewContextRequestID(context.Background(), reqID) ctx = ctxhelper.NewContextComponentName(ctx, componentName) rw := NewResponseWriter(w, ctx) handler.ServeHTTP(rw, req) }) }
func ExampleWithTimeout() { // Pass a context with a timeout to tell a blocking function that it // should abandon its work after the timeout elapses. ctx, _ := context.WithTimeout(context.Background(), 100*time.Millisecond) select { case <-time.After(200 * time.Millisecond): fmt.Println("overslept") case <-ctx.Done(): fmt.Println(ctx.Err()) // prints "context deadline exceeded" } // Output: // context deadline exceeded }