code: func (c *client) Read(ctx context.Context, fieldsToRead []string, entity DomainObject) error {
  	if !c.initialized {
  		return &ErrNotInitialized{}
  	}
  
  	// lookup registered entity, the registrar will return error if it is not found
  	re, err := c.registrar.Find(entity)
  	if err != nil {
  		return err
  	}
  
  	// translate entity field values to a map of primary key name/values pairs
  	// required to perform a read
  	fieldValues := re.KeyFieldValues(entity)
  
  	// build a list of column names from a list of entities field names
  	columnsToRead, err := re.ColumnNames(fieldsToRead)
  	if err != nil {
  		return err
  	}
  
  	results, err := c.connector.Read(ctx, re.EntityInfo(), fieldValues, columnsToRead)
  	if err != nil {
  		return err
  	}
  
  	// map results to entity fields
  	re.SetFieldValues(entity, results, columnsToRead)
  
  	return nil
  }
docs: // Read fetches an entity by primary key, The entity provided must contain
  // values for all components of its primary key for the operation to succeed.
  // If `fieldsToRead` is provided, only a subset of fields will be
  // marshalled onto the given entity