code: func With(err error, keyvals ...interface{}) error {
  	if err == nil {
  		return nil
  	}
  
  	if len(keyvals) == 0 {
  		return err
  	}
  
  	var kvs []interface{}
  
  	// extract context from previous error
  	if c, ok := err.(*withContext); ok {
  		err = c.err
  
  		kvs = append(kvs, c.keyvals...)
  
  		if len(kvs)%2 != 0 {
  			kvs = append(kvs, nil)
  		}
  	}
  
  	kvs = append(kvs, keyvals...)
  
  	if len(kvs)%2 != 0 {
  		kvs = append(kvs, nil)
  	}
  
  	// Limiting the capacity of the stored keyvals ensures that a new
  	// backing array is created if the slice must grow in With.
  	// Using the extra capacity without copying risks a data race.
  	return &withContext{
  		err:     err,
  		keyvals: kvs[:len(kvs):len(kvs)],
  	}
  }
docs: // The implementation bellow is heavily influenced by go-kit's log context.
  // With returns a new error with keyvals context appended to it.
  // If the wrapped error is already a contextual error created by With
  // keyvals is appended to the existing context, but a new error is returned.