package http
import (
- "fmt"
"io"
"net/textproto"
"sort"
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)
}
}
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
+ }
}
}
}
}
}
}
+
+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)
+ }
+}