Was ist der Unterschied zwischen ResponseWriter.Write und io.WriteString?

Ich habe drei Möglichkeiten zum Schreiben von Inhalten in eine HTTP-Antwort gesehen:

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

Und

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

Auch gibt es:

fmt.Fprintf(w, "blabla")

Was ist der Unterschied zwischen ihnen? Welches wird bevorzugt verwendet?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage