¿Qué significa nada en golang?
(2)
En Go, nil
es el valor cero para punteros, interfaces, mapas, segmentos, canales y tipos de funciones , que representan un valor sin inicializar .
nil
no significa un estado "indefinido", es un valor propio en sí mismo. Un objeto en Go es nil
simplemente si y solo si su valor es nil
, lo que solo puede ser si es de uno de los tipos mencionados anteriormente.
Un error
es una interfaz, por lo que nil
es un valor válido para uno, a diferencia de una string
. Por razones obvias, un error nil
representa ningún error .
Hay muchos casos usando nil en golang. Por ejemplo:
func (u *URL) Parse(ref string) (*URL, error) {
refurl, err := Parse(ref)
if err != nil {
return nil, err
}
return u.ResolveReference(refurl), nil
}
pero no podemos usarlo así:
var str string //or var str int
str = nil
el compilador de golang arrojará un can''t use nil as type string in assignment
error de can''t use nil as type string in assignment
.
Parece que nil
solo se puede usar para un puntero de estructura e interfaz. Si ese es el caso, entonces ¿qué significa? y cuando lo usamos para comparar con el otro objeto, ¿cómo se comparan? En otras palabras, ¿cómo determina Golang que un objeto es nulo ?
EDITAR: Por ejemplo, si una interfaz es nula, su tipo y valor deben ser nulos al mismo tiempo. ¿Cómo hace golang esto?
nil
en Go es simplemente el valor de puntero NULL
de otros idiomas.
Puede usarlo de manera efectiva en lugar de cualquier puntero o interfaz (las interfaces son, en cierto modo, punteros).
Puede usarlo como un error, porque el tipo de error es una interfaz .
No puede usarlo como una cadena porque en Ir, una cadena es un valor.
nil
está desatado en Go, lo que significa que no puedes hacer eso:
var n = nil
Porque aquí te falta un tipo para n
. Sin embargo, usted puede hacer
var n *Foo = nil
Tenga en cuenta que nil
es el valor cero de los punteros e interfaces, los punteros no inicializados y las interfaces serán nil
.