Fast path for setting headers.

- No heap allocation
- No indirection
- CanonicalMIMEHeaderKey() is not called
This commit is contained in:
Manu Mtz-Almeida 2015-05-23 16:39:25 +02:00
parent 35fd7fb480
commit a2105ce34c
4 changed files with 9 additions and 9 deletions

View File

@ -30,7 +30,7 @@ type (
} }
) )
const htmlContentType = "text/html; charset=utf-8" var htmlContentType = []string{"text/html; charset=utf-8"}
func (r HTMLProduction) Instance(name string, data interface{}) Render { func (r HTMLProduction) Instance(name string, data interface{}) Render {
return HTML{ return HTML{
@ -58,6 +58,6 @@ func (r HTMLDebug) loadTemplate() *template.Template {
} }
func (r HTML) Write(w http.ResponseWriter) error { func (r HTML) Write(w http.ResponseWriter) error {
w.Header().Set("Content-Type", htmlContentType) w.Header()["Content-Type"] = htmlContentType
return r.Template.ExecuteTemplate(w, r.Name, r.Data) return r.Template.ExecuteTemplate(w, r.Name, r.Data)
} }

View File

@ -19,15 +19,15 @@ type (
} }
) )
const jsonContentType = "application/json; charset=utf-8" var jsonContentType = []string{"application/json; charset=utf-8"}
func (r JSON) Write(w http.ResponseWriter) error { func (r JSON) Write(w http.ResponseWriter) error {
w.Header().Set("Content-Type", jsonContentType) w.Header()["Content-Type"] = jsonContentType
return json.NewEncoder(w).Encode(r.Data) return json.NewEncoder(w).Encode(r.Data)
} }
func (r IndentedJSON) Write(w http.ResponseWriter) error { func (r IndentedJSON) Write(w http.ResponseWriter) error {
w.Header().Set("Content-Type", jsonContentType) w.Header()["Content-Type"] = jsonContentType
jsonBytes, err := json.MarshalIndent(r.Data, "", " ") jsonBytes, err := json.MarshalIndent(r.Data, "", " ")
if err != nil { if err != nil {
return err return err

View File

@ -14,12 +14,12 @@ type String struct {
Data []interface{} Data []interface{}
} }
const plainContentType = "text/plain; charset=utf-8" var plainContentType = []string{"text/plain; charset=utf-8"}
func (r String) Write(w http.ResponseWriter) error { func (r String) Write(w http.ResponseWriter) error {
header := w.Header() header := w.Header()
if _, exist := header["Content-Type"]; !exist { if _, exist := header["Content-Type"]; !exist {
header.Set("Content-Type", plainContentType) header["Content-Type"] = plainContentType
} }
if len(r.Data) > 0 { if len(r.Data) > 0 {
fmt.Fprintf(w, r.Format, r.Data...) fmt.Fprintf(w, r.Format, r.Data...)

View File

@ -13,9 +13,9 @@ type XML struct {
Data interface{} Data interface{}
} }
const xmlContentType = "application/xml; charset=utf-8" var xmlContentType = []string{"application/xml; charset=utf-8"}
func (r XML) Write(w http.ResponseWriter) error { func (r XML) Write(w http.ResponseWriter) error {
w.Header().Set("Content-Type", xmlContentType) w.Header()["Content-Type"] = xmlContentType
return xml.NewEncoder(w).Encode(r.Data) return xml.NewEncoder(w).Encode(r.Data)
} }