Go y Golang

Go: error con JSON y arreglo vacío

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 [].

Explicación del problema

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:

See the gist on github.

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.

Solución del problema

Para arreglarlo lo único que hice fue declarar la variable con duck typing, así:

usuarios := []Usuario{}

El código se ve así:

See the gist on github.

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.

Conclusión

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.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.
parzibyte

Programador freelancer listo para trabajar contigo. Aplicaciones web, móviles y de escritorio. PHP, Java, Go, Python, JavaScript, Kotlin y más :) https://parzibyte.me/blog/software-creado-por-parzibyte/

Compartir
Publicado por
parzibyte

Entradas recientes

Imprimir PDF con Bot de Telegram

La impresión de un PDF en cualquier impresora se puede automatizar con un bot de…

4 días hace

Enviar mensaje con bot de Telegram usando JavaScript (lado del cliente)

Hoy te enseñaré cómo enviar un mensaje a un usuario desde un bot de Telegram…

5 días hace

PHP: incrustar imagen en base64

El día de hoy te enseñaré algo muy sencillo pero útil al programar con PHP:…

5 días hace

Plugin ESC POS – Actualización 3.4.0: imprimir HTML

El plugin para imprimir en impresoras térmicas alcanza hoy su versión 3.4.0 agregando soporte para…

6 días hace

JavaScript (lado del cliente): leer pixeles de imagen

En ocasiones es necesario leer los pixeles y colores de una imagen con JavaScript del…

2 semanas hace

PHP y JavaScript: llenar select con AJAX

Siguiendo con los tutoriales de listas desplegables o select con JavaScript, vamos a ver cómo…

2 semanas hace

Esta web usa cookies.