From the docs:
JSON cannot represent cyclic data structures and Marshal does not handle them. Passing cyclic structures to Marshal will result in an infinite recursion.
I've experienced this situation, which results in a runtime panic.
What I'm wondering is if anyone can provide a working program that demonstrates a non-panic situation where json.Marshal returns a non-nil error. The best answers would clearly include the inputs used.
Update: now using a channel instead of a map[int]int to elicit the error
Go-specific structures,e.g.
func
orchan
refuse to serialize:Just to complement Jonathan's answer, the json.Marshal function can return two types of errors:
UnsupportedTypeError
orUnsupportedValueError
The first one can be caused, as Jonathan said by trying to Marshal an invalid type:
On the other hand you can also have the Marshal function return an error by passing an invalid value: