En este artículo expongo un pequeño error que sucede con Go (supongo que no es un bug sino que simplemente así se comporta el lenguaje) al declarar un arreglo vacío.
Lo que sucede es que cuando se declara un arreglo de structs y el mismo está vacío, al ser codificado como JSON el arreglo es null
en lugar de []
.
En otras palabras: go codifica (con JSON) un arreglo vacío como null
en lugar de como un arreglo vacío []
.
Como lo dije, el problema es que al declarar el arreglo vacío, es nil, en lugar de que sea un arreglo vacío.
Por ejemplo, en el siguiente código, si codificamos el arreglo vacío como JSON será null:
package main
import "fmt"
import "encoding/json"
type Usuario struct {
Nombre string
}
func main() {
var usuarios []Usuario
usuariosCodificados, _ := json.Marshal(usuarios)
fmt.Printf("El arreglo es: %s", string(usuariosCodificados))
}
La salida es “El arreglo es: null” cuando en realidad debería ser []
indicando un arreglo vacío. Pero esto solo pasa cuando lo declaro de esa forma.
Puedes probarlo en este enlace.
Para arreglarlo lo único que hice fue declarar la variable con duck typing, así:
usuarios := []Usuario{}
El código se ve así:
package main
import "fmt"
import "encoding/json"
type Usuario struct {
Nombre string
}
func main() {
usuarios := []Usuario{}
usuariosCodificados, _ := json.Marshal(usuarios)
fmt.Printf("El arreglo es: %s", string(usuariosCodificados))
}
No sé qué cambia además de las llaves al final (un experto en Go sabrá) pero al codificarlo como json la salida es correcta. Puedes probar el programa en este enlace.
Este es un problema que me afectaba pues al crear una API con Go e iterar el arreglo se generaba un error, pues no se puede recorrer null.
En cambio, cuando es un arreglo vacío, el error no sucede, pues sí se puede recorrer aunque esté vacío.
Como lo dije, yo no sé si este error sea un error, tal vez es el comportamiento esperado y simplemente no leí bien o no entendí esa parte.
Hoy te voy a presentar un creador de credenciales que acabo de programar y que…
Ya te enseñé cómo convertir una aplicación web de Vue 3 en una PWA. Al…
En este artículo voy a documentar la arquitectura que yo utilizo al trabajar con WebAssembly…
En un artículo anterior te enseñé a crear un PWA. Al final, cualquier aplicación que…
Al usar Comlink para trabajar con los workers usando JavaScript me han aparecido algunos errores…
En este artículo te voy a enseñar cómo usar un "top level await" esperando a…
Esta web usa cookies.