code: func (v *Version) String() string {
  	var buf bytes.Buffer
  	fmtParts := make([]string, len(v.segments))
  	for i, s := range v.segments {
  		// We can ignore err here since we've pre-parsed the values in segments
  		str := strconv.FormatInt(s, 10)
  		fmtParts[i] = str
  	}
  	fmt.Fprintf(&buf, strings.Join(fmtParts, "."))
  	if v.pre != "" {
  		fmt.Fprintf(&buf, "-%s", v.pre)
  	}
  	if v.metadata != "" {
  		fmt.Fprintf(&buf, "+%s", v.metadata)
  	}
  
  	return buf.String()
  }
docs: // String returns the full version string included pre-release
  // and metadata information.
  //
  // This value is rebuilt according to the parsed segments and other
  // information. Therefore, ambiguities in the version string such as
  // prefixed zeroes (1.04.0 => 1.4.0), `v` prefix (v1.0.0 => 1.0.0), and
  // missing parts (1.0 => 1.0.0) will be made into a canonicalized form
  // as shown in the parenthesized examples.