Buscar..


Explicación

Los valores cero o la inicialización cero son simples de implementar. Viniendo de lenguajes como Java, puede parecer complicado que algunos valores sean nil y otros no. En resumen de Valor cero: La especificación del lenguaje de programación Go :

Los punteros, funciones, interfaces, segmentos, canales y mapas son los únicos tipos que pueden ser nulos. El resto se inicializa en falso, cero o cadenas vacías según sus respectivos tipos.

Si una función comprueba alguna condición, pueden surgir problemas:

func isAlive() bool {
    //Not implemented yet
    return false
}

El valor cero será falso incluso antes de la implementación. Las pruebas unitarias dependientes del retorno de esta función podrían dar falsos positivos / negativos.

Una solución típica es devolver también un error, que es idiomático en Go:

package main

import "fmt"

func isAlive() (bool, error) {
    //Not implemented yet
    return false, fmt.Errorf("Not implemented yet")
}

func main() {
    _, err := isAlive()
    if err != nil {
        fmt.Printf("ERR: %s\n", err.Error())
    }
    
}

jugar en el patio de recreo

Al devolver tanto una estructura como un error, se necesita una estructura de usuario para la devolución, que no es muy elegante. Hay dos opciones de contador:

  • Trabajar con interfaces: devuelve nil devolviendo una interfaz.
  • Trabajar con punteros: un puntero puede ser nil

Por ejemplo, el siguiente código devuelve un puntero:

func(d *DB) GetUser(id uint64) (*User, error) {
    //Some error ocurred
    return nil, err
}


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow