code: func (r *ReadGroup) String() string {
  	var buf bytes.Buffer
  	fmt.Fprintf(&buf, "@RG\tID:%s", r.name)
  	if r.center != "" {
  		fmt.Fprintf(&buf, "\tCN:%s", r.center)
  	}
  	if r.description != "" {
  		fmt.Fprintf(&buf, "\tDS:%s", r.description)
  	}
  	if (r.date != time.Time{}) {
  		fmt.Fprintf(&buf, "\tDT:%s", r.date.Format(iso8601TimeDateN))
  	}
  	if r.flowOrder != "" {
  		fmt.Fprintf(&buf, "\tFO:%s", r.flowOrder)
  	}
  	if r.keySeq != "" {
  		fmt.Fprintf(&buf, "\tKS:%s", r.keySeq)
  	}
  	if r.library != "" {
  		fmt.Fprintf(&buf, "\tLB:%s", r.library)
  	}
  	if r.program != "" {
  		fmt.Fprintf(&buf, "\tPG:%s", r.program)
  	}
  	if r.insertSize != 0 {
  		fmt.Fprintf(&buf, "\tPI:%d", r.insertSize)
  	}
  	if r.platform != "" {
  		fmt.Fprintf(&buf, "\tPL:%s", r.platform)
  	}
  	if r.platformUnit != "" {
  		fmt.Fprintf(&buf, "\tPU:%s", r.platformUnit)
  	}
  	if r.sample != "" {
  		fmt.Fprintf(&buf, "\tSM:%s", r.sample)
  	}
  	for _, tp := range r.otherTags {
  		fmt.Fprintf(&buf, "\t%s:%s", tp.tag, tp.value)
  	}
  	return buf.String()
  }
docs: // String returns a string representation of the read group according to the
  // SAM specification section 1.3,