defer func() { _ = resp.Body.Close() }()

825 views
Skip to first unread message

Gert

unread,
Aug 16, 2017, 8:05:39 AM8/16/17
to golang-nuts
To pass errcheck I need to do something like

defer func() { _ = resp.Body.Close() }()

instead of 

defer resp.Body.Close()

Is this something the errcheck tool can figure out to mark as valid instead or does the errcheck tool need help from the compiler so the second case is also ok?

Gert

unread,
Aug 16, 2017, 8:18:48 AM8/16/17
to golang-nuts
Never mind the tool is right I could print the error or something like that, I assumed you couldn't do anything useful with the error anyway in a defer

Jakob Borg

unread,
Aug 16, 2017, 10:40:29 AM8/16/17
to Gert, golang-nuts
As far as I'm concerned, `defer resp.Body.Close()` is perfectly cromulent and there's no need to for error checking contortions to satisfy the lint tool. If we're talking about a http.Request I doubt that the close can ever fail (I haven't checked; but it doesn't seem like something that would make sense). More generally, Close() failing on something read-only is not something I'd worry much about. If it happens systematically there's something seriously wrong with the system and you'll get errors from Open() or similar when you run out of file descriptors...

//jb
> --
> 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.
> For more options, visit https://groups.google.com/d/optout.

Eric Johnson

unread,
Aug 17, 2017, 3:25:11 AM8/17/17
to golang-nuts
For the truly paranoid, perhaps write a helper function "EnsureClosed()" or something like that, which will do the close, but perhaps also appropriately log a failure to close.

dja...@gmail.com

unread,
Aug 17, 2017, 4:50:05 AM8/17/17
to golang-nuts

Robert Fritzsche

unread,
Aug 17, 2017, 12:46:57 PM8/17/17
to golang-nuts
Hi Gert,

it the -ignore flag an option for you? E.g. errcheck -ignore '[cC]lose' $(GOPACKAGES)


Cheers!
Robert

Amnon

unread,
Jun 27, 2020, 6:21:30 AM6/27/20
to golang-nuts
Apologies for replying to an old post.
But I am sometimes a bit slow in reading my messages.

I too think that errcheck's is a bit severe in its treatment of deferred calls to Close().

So I forked the code and changed the behaviour to be more permissive.
https://github.com/amnonbc/errcheck

Feel free to use it.

- amnon
Reply all
Reply to author
Forward
0 new messages