code: func SliceScan(r ColScanner) ([]interface{}, error) {
  	// ignore r.started, since we needn't use reflect for anything.
  	columns, err := r.Columns()
  	if err != nil {
  		return []interface{}{}, err
  	}
  
  	values := make([]interface{}, len(columns))
  	for i := range values {
  		values[i] = new(interface{})
  	}
  
  	err = r.Scan(values...)
  
  	if err != nil {
  		return values, err
  	}
  
  	for i := range columns {
  		values[i] = *(values[i].(*interface{}))
  	}
  
  	return values, r.Err()
  }
docs: // SliceScan a row, returning a []interface{} with values similar to MapScan.
  // This function is primarily intended for use where the number of columns
  // is not known.  Because you can pass an []interface{} directly to Scan,
  // it's recommended that you do that as it will not have to allocate new
  // slices per row.