go

¿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 .