code: func HandlerWithPrefix(handler Handler, keyvals ...interface{}) Handler {
  	if len(keyvals) == 0 {
  		return handler
  	}
  
  	prevkvs, handler := extractHandlerContext(handler)
  
  	n := len(prevkvs) + len(keyvals)
  	if len(keyvals)%2 != 0 {
  		n++
  	}
  
  	kvs := make([]interface{}, 0, n)
  	kvs = append(kvs, keyvals...)
  
  	if len(kvs)%2 != 0 {
  		kvs = append(kvs, nil)
  	}
  
  	kvs = append(kvs, prevkvs...)
  
  	return newContextualHandler(handler, kvs)
  }
docs: // HandlerWithPrefix returns a new error handler with keyvals context prepended to it.
  // If the wrapped error handler is already a contextual error handler created by HandlerWith or HandlerWithPrefix
  // keyvals is prepended to the existing context, but a new error handler is returned.
  //
  // The created handler will prepend it's own context to the handled errors.