Challenge 3 — Solution Task: Define a contextKey type and a requestIDKey constant. Use context.WithValue to attach a request ID string to a context, then write a function logRequest(ctx context.Context) that reads it back with ctx.Value and prints it. package main import ( "context" "fmt" ) type contextKey string const requestIDKey contextKey = "requestID" func logRequest(ctx context.Context) { requestID := ctx.Value(requestIDKey) fmt.Println("Handling request:", requestID) } func main() { ctx := context.WithValue(context.Background(), requestIDKey, "req-12345") logRequest(ctx) } Expected output: Handling request: req-12345 Notes: - contextKey is a small custom string type, used instead of a plain string key, specifically to avoid collisions with other packages that might use the same literal string as a different key — defining a distinct type for context keys is the standard, safe convention. - ctx.Value(requestIDKey) returns a value of type any, since WithValue/Value work for any kind of stored data — here it happens to print correctly as a string without any extra conversion, since Println accepts any value directly. - If requestIDKey were never set on ctx, ctx.Value would simply return nil rather than an error — there's no built-in equivalent of the comma-ok idiom (Fundamentals Chapter 7) for context values.