package context import ( "context" "fmt" "google.golang.org/grpc/metadata" ) func AppendToContext(ctx context.Context, key string, value interface{}) context.Context { ctx = context.WithValue(ctx, key, value) _value := "" switch value.(type) { case []byte: _value = string(value.([]byte)) break case string: _value = value.(string) break default: _value = fmt.Sprint(value) break } md, _, ex := metadata.FromOutgoingContextRaw(ctx) if !ex { md = metadata.New(map[string]string{}) } md.Set(key, _value) ctx = metadata.NewOutgoingContext(ctx, md) return ctx }