examples - print json golang
¿Qué entrada provocará que json.Marshal de Golang devuelva un error? (2)
Solo para complementar la respuesta de Jonathan, la función json.Marshal puede devolver dos tipos de errores: UnsupportedTypeError
o UnsupportedValueError
La primera puede ser causada, como dijo Jonathan al intentar calcular un tipo no válido:
_, err := json.Marshal(make(chan int))
_, ok := err.(*json.UnsupportedTypeError) // ok == true
Por otro lado, también puede hacer que la función Marshal devuelva un error al pasar un valor no válido:
_, err := json.Marshal(math.Inf(1))
_, ok := err.(*json.UnsupportedValueError) // ok == true
De la docs :
JSON no puede representar estructuras de datos cíclicas y Marshal no las maneja. Pasar estructuras cíclicas a Marshal resultará en una recursión infinita.
He experimentado esta situación, lo que resulta en un pánico en el tiempo de ejecución.
Lo que me pregunto es si alguien puede proporcionar un programa funcional que demuestre una situación de no pánico en la que json.Marshal devuelva un error no nulo. Las mejores respuestas incluirían claramente las entradas utilizadas .
Actualización: ahora se usa un canal en lugar de un mapa [int] int para provocar el error
Estructuras específicas de Go, por ejemplo, func
o chan
niegan a serializar:
package main
import (
"encoding/json"
"fmt"
)
func main() {
value := make(chan int)
_, err := json.Marshal(value)
fmt.Println(err)
}