mehrere Antwort.WriteHeader Anrufe in ganz einfaches Beispiel?

Habe ich die meisten basic-net/http-Programm, das ich verwende, um zu lernen, den namespace im Gehen:

package main

import (
    "fmt"
    "log"
    "net/http"
)

func main() {
    http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
        fmt.Println(r.URL)
        go HandleIndex(w, r)
    })

    fmt.Println("Starting Server...")
    log.Fatal(http.ListenAndServe(":5678", nil))
}

func HandleIndex(w http.ResponseWriter, r *http.Request) {
    w.WriteHeader(200)
    w.Write([]byte("Hello, World!"))
}

Wenn ich das Programm starte und eine Verbindung zu localhost:5678 in Chrom, bekomme ich diese in der Konsole:

Starting Server...
/
2015/01/15 13:41:29 http: multiple response.WriteHeader calls
/favicon.ico
2015/01/15 13:41:29 http: multiple response.WriteHeader calls

Aber ich sehe nicht, wie das möglich ist. Ich drucken Sie das URL, das starten einer neuen goroutine, schreib die header einmal, und geben Sie einen statischen Körper von Hello, World! wie Es scheint, eines von zwei Dingen geschieht. Entweder etwas, was hinter die Szenen zu schreiben ist eine andere Kopf-oder irgendwie HandleIndex genannt wird, zweimal für die gleiche Anfrage. Was kann ich tun, um zu stoppen schreiben mehrere Header?

EDIT: Es scheint etwas zu tun mit der go HandleIndex(w, r) Linie, weil wenn ich Sie entfernen go und es muss nur eine Funktion aufrufen, statt eine goroutine, ich bekomme keine Probleme und der browser erhält seine Daten. Mit ihm wird eine goroutine, bekomme ich mehrere WriteHeader Fehler und der browser nicht anzeigen "Hello World." Warum ist diese eine goroutine zu brechen?

InformationsquelleAutor der Frage Corey Ogburn | 2015-01-15

Schreibe einen Kommentar