code: func (t *Table) String() string {
  	t.mtx.RLock()
  	defer t.mtx.RUnlock()
  
  	if len(t.Rows) == 0 {
  		return ""
  	}
  
  	// determine the width for each column (cell in a row)
  	var colwidths []uint
  	for _, row := range t.Rows {
  		for i, cell := range row.Cells {
  			// resize colwidth array
  			if i+1 > len(colwidths) {
  				colwidths = append(colwidths, 0)
  			}
  			cellwidth := cell.LineWidth()
  			if t.MaxColWidth != 0 && cellwidth > t.MaxColWidth {
  				cellwidth = t.MaxColWidth
  			}
  
  			if cellwidth > colwidths[i] {
  				colwidths[i] = cellwidth
  			}
  		}
  	}
  
  	var lines []string
  	for _, row := range t.Rows {
  		row.Separator = t.Separator
  		for i, cell := range row.Cells {
  			cell.Width = colwidths[i]
  			cell.Wrap = t.Wrap
  			cell.RightAlign = t.rightAlign[i]
  		}
  		lines = append(lines, row.String())
  	}
  	return strutil.Join(lines, "\n")
  }
docs: // String returns the string value of table