近段时间从新对个人Web应用程序进行了一些思考,首先程序启动的main.go文件中,暂时的路由添加没有太大的问题,可是根据以往的项目开发经验,若是这个系统对外分享的话,以后在作大项目的时候,会遇到添加不少路由的状况,而后就会发现文件变的愈来愈大,关键是路由还放在了main.go文件中,这个实在是太麻烦了,因而今天作了下少量的改动。git
每次我都会将本身实践的代码放到github上而且都会打一个tag,方便后面用的同窗使用,这里我如下面分支的代码进行实践分享github
https://github.com/durban89/typescript_demo.git tag: 1.0.12
一、改动main.go文件typescript
将原来的函数
http.HandleFunc("/view/", helpers.MakeHandler(controllers.ArticleView)) http.HandleFunc("/save/", helpers.MakeHandler(controllers.ArticleSave)) http.HandleFunc("/edit/", helpers.MakeHandler(controllers.ArticleEdit)) http.HandleFunc("/upload/", controllers.UploadHandler) http.HandleFunc("/postFile/", controllers.PostFileHandler)
用下面的代码替换掉post
router.Routes()
这样咱们将路由这一块的逻辑分到一个负责路由的文件来作处理,这样main.go文件就看起来很简洁。测试
二、添加router.go优化
建立文件router/router.go,添加代码以下code
package router import ( "net/http" "github.com/durban89/wiki/controllers" ) // RouterMap 路由 type RouterMap struct { Path string Fn func(http.ResponseWriter, *http.Request) } // RouterMaps 路由列表 var RouterMaps = []*RouterMap{ { Path: "/view/", Fn: controllers.ArticleViewWithID, }, { Path: "/save/", Fn: controllers.ArticleViewWithID, }, { Path: "/edit/", Fn: controllers.ArticleViewWithID, }, { Path: "/upload/", Fn: controllers.UploadHandler, }, { Path: "/postFile/", Fn: controllers.PostFileHandler, }, } // Routes 操做 func Routes() { for i := 0; i < len(RouterMaps); i++ { cRoute := RouterMaps[i] http.HandleFunc(cRoute.Path, cRoute.Fn) } }
从上面的代码能够看出来,路由的管理稍微好一些了,这也就达到了咱们优化main.go文件的目的。regexp
三、测试router
在controllers/article.go文件中添加以下函数
func ArticleViewWithID(w http.ResponseWriter, r *http.Request) { if strings.ToLower(r.Method) == "get" { var validPath = regexp.MustCompile("^/(view)/([a-zA-Z0-9]+)$") m := validPath.FindStringSubmatch(r.URL.Path) if m == nil { http.NotFound(w, r) return } // 获取文章标题或者文章ID fmt.Println(m[2:]) fmt.Fprintf(w, "Welcome to the home page!") return } http.NotFound(w, r) return }
添加完以后,从新编译项目并运行,一切正常。
项目更新地址
https://github.com/durban89/typescript_demo.git tag: 1.1.0