// writeString writes s to w.
// If w has a WriteString method, it is invoked instead of w.Write.
func writeString(w io.Writer, s string) (n int, err error) {
type stringWriter interface {
WriteString(string) (n int, err error)
if sw, ok := w.(stringWriter); ok {
return sw.WriteString(s) // avoid a copy
return w.Write([]byte(s)) // allocate temporary copy
func writeHeader(w io.Writer, contentType string) error {
if _, err := writeString(w, "Content-Type: "); err != nil {
if _, err := writeString(w, contentType); err != nil {