Cualquier diferencia entre verificar nil a la izquierda o a la derecha.
Esta función toma dos cadenas y devuelve una estructura o nil. Dentro de esta función he escrito una estructura para ser utilizada solo en esta función.
type OrgFundingsDetailsFCT struct {
ID int `db:"id"`
OrgProfileID int `db:"org_profile_id"`
OrgID int `db:"org_id"`
RefID string `db:"ref_id"`
AmountUSD float64 `db:"amount_usd"`
FundingDate string `db:"funding_date"`
Status string `db:"status"`
Round string `db:"round"`
CreatedBy string `db:"created_by"`
}
func (s *Server) getCompareOrgFundingsByRefID(refID, status string) (*OrgFundingsDetailsFCT, error) {
type orgFunding struct {
RefID string `db:"ref_id"`
Status string `db:"status"`
}
var orgFundingsDetailsFCT OrgFundingsDetailsFCT
orgfunding := orgFunding{
RefID: refID,
Status: status,
}
const query = `SELECT id, org_profile_id, org_id, ref_id, amount_usd, funding_date, status, round, created_by FROM org_fundings WHERE ref_id=:ref_id AND status=:status`
if err := s.db.NamedGet(&orgFundingsDetailsFCT, query, orgfunding); err == sql.ErrNoRows {
s.logger.Infof("¡Filas vacías! getCompareOrgFundingsByRefID #111 %+v", err)
return nil, nil
} else if err != nil {
s.logger.Infof("¡Se encontraron errores! getCompareOrgFundingsByRefID #111 %+v", err)
return nil, err
}
return &orgFundingsDetailsFCT, nil
}
Ahora estoy comprobando si esta función devuelve nil
de la siguiente manera:
if nil != orgFundingsRefIdPending{
// lógica
}
Pero mi pregunta es si al comprobar de esa manera es lo mismo o no:
if orgFundingsRefIdPending != nil{
// lógica
}
¿Si pongo nil
en el lado izquierdo y lo comparo con mi resultado en el lado derecho O si pongo mi resultado en el lado izquierdo y lo comparo con nil
en el lado derecho, es lo mismo? ¿Significa lo mismo si pongo nil
en cualquier lado? Además, ¿es válido usar una estructura solo en la función?
davy.ai
Sí, estas dos declaraciones if son equivalentes y producirán el mismo resultado:
En Go, el valor
nil
es un identificador predeclarado que representa el valor cero para punteros, interfaces, canales, mapas, slices y tipos de función. Es válido usar una estructura dentro de una función únicamente para el uso de esa función. De hecho, es una práctica común definir estructuras locales o anónimas dentro de una función con el propósito de almacenar datos temporales.