]> Cypherpunks repositories - gostls13.git/commitdiff
net/http: avoid fmt.Fprintf in Header.WriteSubset
authorBrad Fitzpatrick <bradfitz@golang.org>
Mon, 28 May 2012 18:26:45 +0000 (11:26 -0700)
committerBrad Fitzpatrick <bradfitz@golang.org>
Mon, 28 May 2012 18:26:45 +0000 (11:26 -0700)
R=golang-dev, dsymonds, r
CC=golang-dev
https://golang.org/cl/6242062

src/pkg/net/http/header.go
src/pkg/net/http/header_test.go

index 95bfa141504924af3c49f4607ec4046deb576163..d584c799f91c721c7e593269edcec9f1b63edbfa 100644 (file)
@@ -5,7 +5,6 @@
 package http
 
 import (
-       "fmt"
        "io"
        "net/textproto"
        "sort"
@@ -61,7 +60,7 @@ var headerNewlineToSpace = strings.NewReplacer("\n", " ", "\r", " ")
 func (h Header) WriteSubset(w io.Writer, exclude map[string]bool) error {
        keys := make([]string, 0, len(h))
        for k := range h {
-               if exclude == nil || !exclude[k] {
+               if !exclude[k] {
                        keys = append(keys, k)
                }
        }
@@ -70,8 +69,10 @@ func (h Header) WriteSubset(w io.Writer, exclude map[string]bool) error {
                for _, v := range h[k] {
                        v = headerNewlineToSpace.Replace(v)
                        v = strings.TrimSpace(v)
-                       if _, err := fmt.Fprintf(w, "%s: %s\r\n", k, v); err != nil {
-                               return err
+                       for _, s := range []string{k, ": ", v, "\r\n"} {
+                               if _, err := io.WriteString(w, s); err != nil {
+                                       return err
+                               }
                        }
                }
        }
index fee5756b77d5f0933ebfc9d61372085f557d3777..41e927f0ebeb0ebda5151df9e5a2d3be6606b690 100644 (file)
@@ -122,3 +122,17 @@ func TestHasToken(t *testing.T) {
                }
        }
 }
+
+func BenchmarkHeaderWriteSubset(b *testing.B) {
+       h := Header(map[string][]string{
+               "Content-Length": {"123"},
+               "Content-Type":   {"text/plain"},
+               "Date":           {"some date at some time Z"},
+               "Server":         {"Go http package"},
+       })
+       var buf bytes.Buffer
+       for i := 0; i < b.N; i++ {
+               buf.Reset()
+               h.WriteSubset(&buf, nil)
+       }
+}