code: func (d *Database) scanRow(data *structData, rows *sql.Rows, dst interface{}, columns []string) error {
  	// check if there is data waiting
  	if !rows.Next() {
  		if err := rows.Err(); err != nil {
  			return err
  		}
  		return sql.ErrNoRows
  	}
  
  	// get a list of targets
  	targets, err := d.Targets(dst, columns)
  	if err != nil {
  		return err
  	}
  
  	// perform the scan
  	if err := rows.Scan(targets...); err != nil {
  		return err
  	}
  
  	// post-process and copy the target values into the struct
  	if err := d.WriteTargets(dst, columns, targets); err != nil {
  		return err
  	}
  
  	return rows.Err()
  }
docs: // scan a single row of data into a struct.