¿Cuál es la diferencia entre ResponseWriter.Write y io.WriteString?

He visto tres formas de escribir contenido en la respuesta HTTP:

func Handler(w http.ResponseWriter, req *http.Request) {
    io.WriteString(w, "blabla.\n")
}

Y:

func Handler(w http.ResponseWriter, r *http.Request) {
    w.Write([]byte("blabla\n"))
}

También hay:

fmt.Fprintf(w, "blabla")

¿Cual es la diferencia entre ellos? ¿Cuál se prefiere usar?

Respuestas a la pregunta(2)

Su respuesta a la pregunta