Hi Mike, thank you for your answer.
Idea came while looking at other json packages. It was either a lot of reflection or some ugly static code generation. Nothing with simple interfaces to implement. So I felt like I could do something very performant if I relied on zero reflection and still being readable and fairly easy to use.
In terms of design, It was my first try at a JSON encoder/decoder, but I worked on interpreters and text parsers before.
For decoding, idea was to go for a sort of JIT decoding, which allows to use an io.Reader in the most efficient way, and also decoding only what we need. And while developing it, I realised my design had a nice potential to use channels for decoding, which I tried and added.
For encoding, it’s a similar take, using a string builder and zero reflection. The encoder is in fact quite simple and borrows from Go 1.10 strings.Builder to build byte buffer. I believe encoder can be improved (in a larger scale than the decoder) and will continue working on it.