On Tue, Dec 29, 2020 at 5:17 PM Amnon <amno...@gmail.com> wrote:

> I always use `json.NewDecoder(r.Body).Decode(&payload)`
>

You shouldn't.

The code is more succinct than reading the entire body into a buffer, and
> then unmarshalling it. And there is only one error to check.
>

There is only one error to check, because you are ignoring one. Namely this
one:

If I was super concerned about people sending trailing gibberish to my
> server, I could call `dec.Buffered()` to see
>

if there was anything left after the json object. I generally have not seen
> people sending garbage after their requests.
>

How do you know, if you don't check? FTR, it's not just about sending
garbage, it's also about requests accidentally being truncated or just
generally garbled.

FWIW, if your concern is that the "read body and unmarshal" is two error
checks, one solution would be to add a helper that does it for you - which
you can then re-use. If that doesn't seem worth it because you would only
use it once - well, then I'd question if the one extra error check is
really that much of an issue.

IMO, `Unmarshal` is simply the correct function to use and if I don't have
a good reason to make my software behave in strange ways in the presence of
bugs, I prefer not to do that. But YMMV, of course.



> And it is not clear what the correct action in these case is. I generally
> will ignore it.
>
> On occasions that I need to consume very large json arrays in my backend,
> without consuming much memory,
> I sometimes do something like
>
> https://play.golang.org/p/Isw_3p7mR5-
>
> On Tuesday, 29 December 2020 at 10:51:23 UTC axel.wa...@googlemail.com
> wrote:
>
>> There is an important semantic difference between the two, which means
>> you almost never want to use a `Decoder`: `Unmarshal` is for parsing a
>> single json document, whereas a `Decoder` is for parsing a stream of
>> concatenated documents, like so: https://play.golang.org/p/4uiNyJlNIKh.
>> In particular, this means that using a `Decoder` silently drops trailing
>> data and might not detect erronous json:
>> https://play.golang.org/p/cuOAUnKCuEk
>> So, unless you specifically know that you have a stream of concatenated
>> json documents `Decoder` is not actually doing what you want.
>>
>> On Tue, Dec 29, 2020 at 11:37 AM Amit Saha <amits...@gmail.com> wrote:
>>
>>> On Tue, Dec 29, 2020 at 11:35 AM burak serdar <bse...@computer.org>
>>> wrote:
>>> >
>>> > On Mon, Dec 28, 2020 at 5:22 PM Amit Saha <amits...@gmail.com> wrote:
>>> > >
>>> > > Hi all, let's say I am a single large JSON object that I want to
>>> > > process in my HTTP server backend.
>>> > >
>>> > > I am trying to get my head around if there is any performance
>>> > > advantage - memory or CPU to use the json.NewDecoder()/Decode()
>>> > > mechanism versus the Unmarshal() function?
>>> >
>>> > Unmarshal uses the decoder for unmarshaling. Unless you are planning
>>> > to process the JSON object piece by piece using a decoder, the two are
>>> > identical in terms of performance.
>>>
>>> Thank you for confirming.
>>>
>>>
>>> >
>>> > >
>>> > > Thanks,
>>> > > Amit
>>> > >
>>> > > --
>>> > > You received this message because you are subscribed to the Google
>>> Groups "golang-nuts" group.
>>> > > To unsubscribe from this group and stop receiving emails from it,
>>> send an email to golang-nuts...@googlegroups.com.
>>> > > To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/golang-nuts/CANODV3%3DU2KRRkvAAEfYqRtCVtYnh2dmGreqePF8QXLo1PriSPw%40mail.gmail.com
>>> .
>>>
>>> --
>>> You received this message because you are subscribed to the Google
>>> Groups "golang-nuts" group.
>>> To unsubscribe from this group and stop receiving emails from it, send
>>> an email to golang-nuts...@googlegroups.com.
>>>
>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/golang-nuts/CANODV3%3DpXGcHzhSmaLr3f911i2CCYb0_j8CGH7zKAZXd_xTD-A%40mail.gmail.com
>>> .
>>>
>> --
> You received this message because you are subscribed to the Google Groups
> "golang-nuts" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to golang-nuts+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/golang-nuts/e9a6f76d-17bb-40da-84b3-2b1b8d0f3b35n%40googlegroups.com
> <https://groups.google.com/d/msgid/golang-nuts/e9a6f76d-17bb-40da-84b3-2b1b8d0f3b35n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/golang-nuts/CAEkBMfGTyPJPmcsvzwuqPXmy5daQVASYx0gf_X52Qc2TS%2BFuvg%40mail.gmail.com.

Reply via email to