Go
Valores cero
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())
}
}
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
}