2016-08-07 9 views
2

ich eine CustomHandler definiert haben (Struktur, welche ServerHTTP implementiert und hat einen HandlerFunc, die einen Fehler zurückgibt)Wie wickeln eine benutzerdefinierte HandlerFunc

type CustomHandler struct{ 
    HandlerFunc func(w http.ResponseWriter, r *http.Request) error 
} 

type (c CustomHandler) ServerHTTP(w http.ResponseWriter, r *http.Request) { 
    err := c.Handeler.ServerHttp(w, r) 
    // Handler error 
} 

Wie kann ich meine CustomHandler wickeln?

Ich habe das versucht, aber ich bekomme nicht genug Argumente.

func myMiddle(h CustomHandler) CustomHandler { 
    return h.CusomHandlerFunc(func(w http.ResponseWriter, r *http.Request) error { 
    h.ServerHTTP(w, r) 
    return nil 
    }) 
} 
+0

Geben Sie die Codezeile an, bei der der Fehler auftritt. Zeigen Sie die Typdefinition für CustomHandler an. –

+0

Haben Sie 'Handler' falsch buchstabiert? –

+0

Der Fehler zeigt auf '})' und nein, ich habe Handler dieses Mal nicht falsch geschrieben. – RockNinja

Antwort

0

Sie können einfach das tun:

type handler func(w http.ResponseWriter, r *http.Request) error 

func (h handler) ServeHTTP(w http.ResponseWriter, r *http.Request) { 
    if err := h(w, r); err != nil { 
     ... 
    } 
} 

und verwenden Sie es mögen:

func home(w http.ResponseWriter, r *http.Request) error { 
    ... 
} 

func main() { 
    http.Handle("/", handler(home)) 
} 
0

Erste CustomHandler wie folgt definieren:

type CustomHandler struct{} 

dann ServeHTTP wie folgt aus:

func (c CustomHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { 
    fmt.Fprintf(w, "%s", msg1) 
} 

dieses Arbeitsbeispielcode siehe:

package main 

import "fmt" 
import "net/http" 

func main() { 
    http.Handle("/", CustomHandler{}) 
    http.ListenAndServe(":80", nil) 
} 

type CustomHandler struct{} 

func (c CustomHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { 
    fmt.Fprintf(w, "%s", msg1) 
} 

var msg1 string = ` 
<!DOCTYPE html> 
<html> 
<head> 
<title>Welcome Home</title> 
</head> 
<body> 
Welcome Home 
</body> 
</html> 
` 

Dann den obigen Code ausführen dann offen http://127.0.0.1/
Ausgang:

Welcome Home 
0

nicht so viele Rechtschreibfehler in Ihrem Code machen .

  • ServerHTTP sollte ServeHTTP
  • Handeler sollte Handler
  • ServerHttp sollte sollte CustomHandlerFunc

sein ServeHTTP

  • CusomHandlerFunc sein Wenn Sie diese Fehlbuchstabierungen behoben haben, haben Sie eine bessere Chance, dass Dein Code funktioniert.