2014-05-08 58 views
-2

我正在學習語言,但我仍然缺乏一些知識。我正在編寫http靜態服務器(第一階段服務資產)。另外我試圖使用大猩猩/多路複用軟件包作爲路由器。go>如何從主要重構http處理程序

到目前爲止,我結束了

pagekage main 

import (
    "fmt" 
    "github.com/gorilla/mux" 
    "html" 
    "net/http" 
) 

func HomeHandler(w http.ResponseWriter, r *http.Request) { 
    fmt.Fprintf(w, "Hello, %q", html.EscapeString(r.URL.Path)) 
} 

func main() { 

    r := mux.NewRouter() 
    r.HandleFunc("/", HomeHandler) 
    r.PathPrefix("/public/").Handler(http.StripPrefix("/public/", 
     http.FileServer(http.Dir("public/")))) 

    http.Handle("/", r) 
    http.ListenAndServe(":8080", nil) 

} 

它工作正常,並提供下/公/

現在我想重構代碼

r.PathPrefix("/public/").Handler(http.StripPrefix("/public/", 
      http.FileServer(http.Dir("public/")))) 

是在所有文件表格

r.PathPrefix("/public/").Handler(PublicHandler) 

這很基本,我想學習如何製作更好看的代碼。

您能對此提出建議嗎?謝謝。

回答

1

簡單的處理程序分配給一個變量:

PublicHandler := http.StripPrefix("/public/", http.FileServer(http.Dir("public/"))) 
r.PathPrefix("/public/").Handler(PublicHandler) 
+0

嗨JimB,是的,我知道,我能做的就是爲你寫以上。我正在考慮將PublicHandler:= http.StripPrefix(「/ public /」,http.FileServer(http.Dir(「public /」)))移到它自己的函數中。而這一步使我感到困難。 – Jaro

+0

@Jaro:請張貼你真正想問的例子。沒有理由不能從函數返回PublicHandler。 – JimB