code: func (e *errorT) Error() string {
  	var (
  		text     = strings.TrimSpace(e.text)
  		prevText []byte
  		prevList List
  	)
  	if e.err != nil {
  		input := []byte(e.err.Error())
  		prevText, prevList = Parse(input)
  		if len(prevText) == 0 && len(prevList) > 0 {
  			// The previous message consists only of key/value
  			// pairs. Search for a key indicating the message.
  			i := 0
  			newLen := len(prevList)
  			for ; i < len(prevList); i += 2 {
  				key, _ := prevList[i].(string)
  				if key == "msg" {
  					if value, ok := prevList[i+1].(string); ok {
  						prevText = []byte(value)
  						newLen -= 2
  						break
  					}
  				}
  			}
  			for ; i < len(prevList)-2; i += 2 {
  				prevList[i] = prevList[i+2]
  				prevList[i+1] = prevList[i+3]
  			}
  			prevList = prevList[:newLen]
  		}
  	}
  
  	buf := pool.AllocBuffer()
  	defer pool.ReleaseBuffer(buf)
  
  	if len(text) > 0 {
  		buf.WriteString(text)
  		if len(prevText) > 0 {
  			buf.WriteString(": ")
  		}
  	}
  	buf.Write(prevText)
  
  	list := dedup(e.list, prevList, e.ctxlist)
  	if len(list) > 0 {
  		if buf.Len() > 0 {
  			buf.WriteRune(' ')
  		}
  		list.writeToBuffer(buf)
  	}
  
  	return buf.String()
  }
docs: // Error implements the error interface.
  //
  // The string returned prints the error text of this error
  // any any wrapped errors, each separated by a colon and a space (": ").
  // After the error message (or messages) comes the key/value pairs.
  // The resulting string can be parsed with the Parse function.