2017-02-10 1 views
-1

Hallo ich arbeite an einem Golang-Projekt. Wenn ich versuche, Slugs mit http.HandleFunc zu verwenden, bekomme ich einen "404 Seite nicht gefunden Fehler". Wenn ich den Slug nehme, funktioniert mein Routing wieder.Golang http.HandleFunc funktioniert nicht mit Schnecken

Im Haupt ich habe:

http.HandleFunc("/products/feedback/{slug}", AddFeedbackHandler) 

Welche Anrufe:

var AddFeedbackHandler = http.HandlerFunc(func(w http.ResponseWriter, r *http.Request){ 
    w.Write([]byte("ChecksOut")) 
}) 

Wenn ich den Weg mit ersetzen:

http.HandleFunc("/products/feedback", AddFeedbackHandler) 

Es funktioniert wieder. Was könnte das verursachen? Bitte vergib mir, wenn das eine grundlegende Frage ist, ich bin neu in Golang und versuche immer noch, den Dreh raus zu bekommen. Vielen Dank!

+1

AWAIK, aktuelle Golang der http-Bibliothek nicht captureing unterstützen '{}' Slug auf dem Weg, vielleicht sollten Sie so etwas wie verwenden https://github.com/gorilla/mux – ymonad

+1

Beachten Sie, dass die Dokumentation HandleFunc behauptet nicht, Slugs zu unterstützen. Die Go-Dokumentation ist ziemlich gut, Sie können im Allgemeinen davon ausgehen, dass Funktionalität nicht Dokument nicht existiert. – Adrian

Antwort

1

Versuchen Sie Folgendes:

const feedbackPath = "/products/feedback/" // note trailing slash. 

func AddFeedbackHandler(w http.ResponseWriter, r *http.Request) { 
    var slug string 
    if strings.HasPrefix(r.URL.Path, feedbackPath) { 
     slug = r.URL.Path[len(feedbackPath):] 
    } 
    fmt.Println("the slug is: ", slug) 
    w.Write([]byte("ChecksOut")) 
} 

die Handler hinzufügen mit diesem Code:

http.HandleFunc(feedbackPath, AddFeedbackHandler) 

Der Schrägstrich auf dem Weg ist für einen Teilbaum Übereinstimmung erforderlich. Sie können die Details zur Verwendung des abschließenden Schrägstrichs in der ServeMux documentation lesen.

playground example

Verwandte Themen