es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Sí, estas dos declaraciones if son equivalentes y producirán el mismo resultado:

        if nil != orgFundingsRefIdPending{
            // lógica
        }
    
        if orgFundingsRefIdPending != nil{
            //lógica
        }
    

    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.

Comments are closed.