El valor cero cero en Golang
nil
es un valor cero en el lenguaje de programación Go, un identificador predefinido muy conocido y significativo. Es la representación literal de varios tipos diferentes de valores cero.
Muchos programadores novatos de Go que han trabajado en otros lenguajes populares pueden considerar nil
como el equivalente de null
(o NULL
) en otros lenguajes. Esto es parcialmente correcto, pero hay varias distinciones entre nil
en Go y null
(o NULL
) en otros idiomas.
Veremos algunos casos para ver qué significa nil
en Golang.
Compruebe el tamaño de nil
con diferentes tipos en Golang
Los diseños de memoria de todos los tipos de valores son siempre los mismos. Los valores nil
del tipo no son excepciones (se asume el valor cero como nil
).
El tamaño de un valor nil
es siempre el mismo que el tamaño de los valores non-nil
con el mismo tipo que el valor nil
. Sin embargo, los valores nil
de varios tipos pueden tener diferentes tamaños.
Código:
package main
import (
"fmt"
"unsafe"
)
func main() {
var p *struct{} = nil
fmt.Println(unsafe.Sizeof(p))
var s []int = nil
fmt.Println(unsafe.Sizeof(s))
var m map[int]bool = nil
fmt.Println(unsafe.Sizeof(m))
var c chan string = nil
fmt.Println(unsafe.Sizeof(c))
var f func() = nil
fmt.Println(unsafe.Sizeof(f))
var i interface{} = nil
fmt.Println(unsafe.Sizeof(i))
}
Producción :
8
24
8
8
8
16
Devolver cadena nil
en Golang
El tipo de variable de puntero que se refiere a un valor de cadena es cadena
. El valor cero de un puntero es nil
.
Código:
package main
import (
"fmt"
)
func main() {
var data *string = nil
if data == nil {
fmt.Println(data)
}
}
Producción :
<nil>
En el siguiente ejemplo, comprobaremos si nil == nil
en Golang.
Código:
package main
import (
"fmt"
)
func main() {
var i *int = nil
var j *int = nil
if i == j {
fmt.Println("equal")
} else {
fmt.Println("no")
}
}
Producción :
equal