一尘不染

向每个处理程序添加响应标头,而无需重复同一行

go

我正在写一个小型网站,对于每个页面,我都会在其标题中放置一个服务器名称:

func httpSignUp(rw http.ResponseWriter, req *http.Request) {
    rw.Header().Set("Server", SERVER_NAME)
}

我想知道是否有一种方法可以设置http.ResponseWriter的默认服务器名称,因此我不必一遍又一遍地使用同一行?


阅读 248

收藏
2020-07-02

共1个答案

一尘不染

创建一个包装器以设置标题:

func wrap(h http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) (
         w.Header().Set("Server", SERVER_NAME)
         h.ServeHTTP(w, r)
    })
}

包装单个处理程序

http.Handle("/path", wrap(aHandler)(
http.Handle("/another/path", wrap(anotherHandler))

或传递给ListenAndServe的根处理程序:

log.Fatal(http.ListenAndServe(addr, wrap(rootHandler))
2020-07-02