Why some errors are hidden from unwrap in golang's net/http/transport

Viewed 31

I do retry HTTP requests on some errors. One is syscall.EPIPE. I do check with errors.Is(err, syscall.EPIPE). But in very very rare cases I see in a log the broken pipe error that is not retried:

level=error msg="can't call 'http://<...>': Post \"http://<...>\": net/http: HTTP/1.x transport connection broken: write tcp 172.18.0.25:44664->172.18.0.11:8000: write: broken pipe"

It looks like in these cases the error is returned from net/http/transpot.go:

return fmt.Errorf("net/http: HTTP/1.x transport connection broken: %v", err)

Just wonder why the %v is preferred there over %w?

0 Answers
Related