2016-08-07 5 views
2

Я определил CustomHandler (реализующий-структуру ServerHTTP, и имеет HandlerFunc, который возвращает ошибку)Как обернуть обычай 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 
} 

Как я могу обернуть мою CustomHandler?

Я пробовал это, но я продолжаю получать недостаточно аргументов.

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

Укажите строку кода, где вы получите сообщение об ошибке. Покажите определение типа для CustomHandler. –

+0

У вас неправильно написано 'Handler'? –

+0

Ошибка указывает на '})', и нет, я на этот раз неверно описал обработчик – RockNinja

ответ

0

Вы можете просто сделать следующее:

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 { 
     ... 
    } 
} 

И использовать его как:

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

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

Сначала определим CustomHandler как это:

type CustomHandler struct{} 

затем ServeHTTP, как это:

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

Смотрите этот рабочий пример кода:

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> 
` 

Затем запустите приведенный выше код затем откройте http://127.0.0.1/
выход:

Welcome Home 
0

Не делайте так много орфографических ошибок в коде ,

  • ServerHTTP должен быть ServeHTTP
  • Handeler должен быть Handler
  • ServerHttp должен быть ServeHTTP
  • CusomHandlerFunc должна быть CustomHandlerFunc

Когда вы устранили опечатки, у вас есть больше шансов, что ваш код работает.

Смежные вопросы