¿Qué es null/nil en Go y cómo trabajar con él?
¡Hola a todos! Empecé a estudiar Go y me encontré con el concepto de nil. En otros lenguajes (por ejemplo, Java o JavaScript) existe null, que a menudo causa errores (NullPointerException). En Go, según tengo entendido, se usa nil, pero el comportamiento es diferente.
Esto es lo que probé:
package main
import "fmt"
func main() {
var p *int
fmt.Println(p) // imprime nil
// fmt.Println(*p) // panic: runtime error: invalid memory address or nil pointer dereference
var s []int
fmt.Println(s == nil) // true
fmt.Println(len(s)) // 0
// s[0] = 1 // panic
var m map[string]int
fmt.Println(m == nil) // true
// m["key"] = 1 // panic
}
Preguntas:
- ¿Por qué
nilen Go no lleva a la creación automática de estructuras vacías (a diferencia denullen algunos lenguajes de programación)? - ¿Cómo verificar correctamente si hay
nilantes de usar punteros, slices, maps y otros tipos que pueden ser nil?