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
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]
Para obtener más información sobre estos temas junto con ejemplos de código, no dudes en consultar mi repositorio de Github:
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