轉載
Go基礎學習記錄 - 編寫Web應用程式 - 重新調整項目目錄結構(二)
上篇文章整理了一部分的檔案結構,本次再將剩餘的一部分也處理下,其實很小的一部分,
將main中makeHandler函數處理掉,封裝到我們看起來還算比較方便的歸類中,建立檔案
helpers/handler.go
package helpersimport ( "net/http" "regexp")var validPath = regexp.MustCompile("^/(edit|save|view)/([a-zA-Z0-9]+)$")// MakeHandler 處理路由函數func MakeHandler(fn func(http.ResponseWriter, *http.Request, string)) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { // 這裡我們將從Request中提取頁面標題,並調用提供的處理常式'fn' m := validPath.FindStringSubmatch(r.URL.Path) if m == nil { http.NotFound(w, r) return } fn(w, r, m[2]) }}
這裡說下我對go看法,其實go的機制並沒有很完善,包管理其實一直是個大問題,按照我們正常的編寫邏輯來說,應該不能像java之類的,先要編譯完再運行,發現問題其實也需要一步一步去找,很頭痛,這也是是為什麼最近ReactNative一直很火的原因,熱編譯暖開機熱更新,都是為了我們的開發效率。然鵝go也是,雖然效能很好,但是包跟包之間的依賴似乎並不是很友好,我這裡暫時按照自己的理解來,後面發現更可用的再進行更新。
下面修改main.go,引入我們需要的helper,main.go修改後的代碼如下
package mainimport ( "log" "net/http" "github.com/durban89/wiki/controllers" "github.com/durban89/wiki/helpers")func main() { http.HandleFunc("/view/", helpers.MakeHandler(controllers.ArticleView)) http.HandleFunc("/save/", helpers.MakeHandler(controllers.ArticleSave)) http.HandleFunc("/edit/", helpers.MakeHandler(controllers.ArticleEdit)) log.Fatal(http.ListenAndServe(":8090", nil))}
是不是感覺清爽了很多。
下面再次進行編譯並運行項目,項目正常啟動運行正常。