"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > Go Basics: por qué nil Slices acepta nuevos valores, pero nil Maps no

Go Basics: por qué nil Slices acepta nuevos valores, pero nil Maps no

Publicado el 2024-11-01
Navegar:166

Se pueden agregar nuevos valores a Nil Slice, pero agregar nuevos valores a Nil Map genera un error de tiempo de ejecución. Veamos por qué

var slice []int // nil slice
slice = append(slice, 1) // append works as expected
fmt.Println(slice) // [1]

var m map[string]int // nil map
m["one"] = 1 // ? Runtime panic: assignment to entry in nil map

Por qué funciona agregar un Nil Slice:
Slice es una referencia a una matriz subyacente y una estructura de datos de tamaño dinámico. Consta de 3 componentes

  • Puntero a la matriz subyacente
  • Longitud del corte
  • Capacidad de corte

Cuando declaramos un segmento nulo, la longitud y la capacidad serán cero y no apunta a ninguna matriz subyacente. Básicamente, la operación de agregar verifica la capacidad y, si no es suficiente, asigna una nueva matriz subyacente con capacidad suficiente para almacenar los nuevos elementos y devuelve un nuevo segmento que apunta a la matriz recién creada. Entonces anexar funciona como se esperaba.

Por qué no funciona agregar a un mapa nulo:
El mapa en golang básicamente actúa como una tabla hash y las estructuras de datos internas deben inicializarse primero antes de que podamos almacenar el par clave-valor.

Cuando declaramos un mapa como nulo (var m map[string]int), no está inicializado y aún no está listo para almacenar pares clave-valor. Entonces esto creará un error de tiempo de ejecución cuando intentemos agregar valores a un mapa nulo. Para evitar este tipo de errores, cree un mapa usando make

var m map[string]int // nil map

m = make(map[string]int) // initialize it
m["one"] = 1 // map is now initialized, so we can add values
print(m) // map[one:1]

  • ¿Go admite Pass By Ref?
  • nuevo frente a marca en Go
  • ¿Go admite la herencia?
  • ¿Cómo crear un servidor web simple en Go?

Para obtener más información sobre estos temas junto con ejemplos de código, no dudes en consultar mi repositorio de Github:

Go Basics: Why nil Slices accept new values, but nil Maps don sa7xp / aprender-golang

Conceptos básicos y avanzados de GoLang. Incluyendo patrones de diseño, principios SOLID y más

Declaración de liberación Este artículo se reproduce en: https://dev.to/sai7xp/go-basics-why-nil-slices-accept-new-values-but-nil-maps-dont-23l0?1 Si hay alguna infracción, por favor contacto Study_golang@163 .comeliminar
Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3