I love context.Context. But I don’t like using context.Value(). Because it relies on using interface{}, it requires the programmers to write a possibly panic-inducing type assertion like this: func foo(ctx context.Context) { v := ctx.Value(key).(*MyThing) // eek ... }Obviously it’s possible to avoid the panic by using a two return value form of type assertion, but that just adds more code for each