2016-05-23 16 views
2

Ich habe eine Func-Registrierung, aber ich weiß nicht, wie kann ich eine HTTP-Funktion darauf aufrufen.Rufen Sie HTTP-Funktion in einer Funktionsregistrierung

registry := map[string]func(){ 
    "MyFunc1": MyFunc1, 
} 
registry["MyFunc1"]() 

func MyFunc1(w http.ResponseWriter, r *http.Request) { 
    w.Write([]byte("Hi Gorilla!")) 
} 

Ich änderte sie diese:

registry := map[string]func(http.ResponseWriter, *http.Request){ 
    "MyFunc1": MyFunc1, 
} 

Aber ich kann es jetzt nicht anrufen!

gorilla.HandleFunc("/", registry["MyFunc1"]()).Name(parentKey) 

Antwort

1

Von der Dokumentation erwartet HandleFunc einen func(http.ResponseWriter, *http.Request) Typen.

jedoch Sie einen Tippfehler in Ihrem Code haben, weil Sie nicht die Funktion als Argument geben, können Sie es fordern:

Ändern Sie den Teil registry["MyFunc1"]() in registry["MyFunc1"]

+0

Dank Wie kann ich überprüfen, existiert ein Element wie if registry ["MyFunc100"] {} ohne Call it –

+0

Es ist eine einfache Karte, so dass Sie überprüfen können, ob ein Eintrag existiert, gibt es Beispiele in https://blog.golang.org/go-maps-in-action –

+0

nicht -bool Registrierung ["MyFunc100"] (Typ func (http.ResponseWriter, * http.Request)) verwendet als ob Bedingung –

Verwandte Themen