unmarshal print golang examples deserialize json go marshalling

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) }