Skip to content

Commit

Permalink
improve the performance of parseRequestHeader
Browse files Browse the repository at this point in the history
```shell
% go test -benchmem -bench=. -run=^Benchmark
goos: darwin
goarch: amd64
pkg: github.com/go-resty/resty/v2
cpu: Intel(R) Core(TM) i9-9880H CPU @ 2.30GHz
Benchmark_parseRequestHeader-16          7956481               155.6 ns/op             0 B/op          0 allocs/op
PASS
ok      github.com/go-resty/resty/v2    1.599s
```
  • Loading branch information
SVilgelm committed Sep 25, 2023
1 parent ae4ef31 commit df3f4a2
Showing 1 changed file with 11 additions and 15 deletions.
26 changes: 11 additions & 15 deletions middleware.go
Original file line number Diff line number Diff line change
Expand Up @@ -116,28 +116,24 @@ func parseRequestURL(c *Client, r *Request) error {
}

func parseRequestHeader(c *Client, r *Request) error {
hdr := make(http.Header)
for k := range c.Header {
hdr[k] = append(hdr[k], c.Header[k]...)
if r.Header == nil {
r.Header = make(http.Header, len(c.Header))

Check warning on line 120 in middleware.go

View check run for this annotation

Codecov / codecov/patch

middleware.go#L120

Added line #L120 was not covered by tests
}

for k := range r.Header {
hdr.Del(k)
hdr[k] = append(hdr[k], r.Header[k]...)
for k, v := range c.Header {
if _, ok := r.Header[k]; ok {
continue
}
r.Header[k] = v[:]
}

if IsStringEmpty(hdr.Get(hdrUserAgentKey)) {
hdr.Set(hdrUserAgentKey, hdrUserAgentValue)
if IsStringEmpty(r.Header.Get(hdrUserAgentKey)) {
r.Header.Set(hdrUserAgentKey, hdrUserAgentValue)
}

ct := hdr.Get(hdrContentTypeKey)
if IsStringEmpty(hdr.Get(hdrAcceptKey)) && !IsStringEmpty(ct) &&
(IsJSONType(ct) || IsXMLType(ct)) {
hdr.Set(hdrAcceptKey, hdr.Get(hdrContentTypeKey))
if ct := r.Header.Get(hdrContentTypeKey); IsStringEmpty(r.Header.Get(hdrAcceptKey)) && !IsStringEmpty(ct) && (IsJSONType(ct) || IsXMLType(ct)) {
r.Header.Set(hdrAcceptKey, r.Header.Get(hdrContentTypeKey))
}

r.Header = hdr

return nil
}

Expand Down

0 comments on commit df3f4a2

Please sign in to comment.