内容简介:近段时间重新对我的Web应用程序进行了一些思考,首先程序启动的main.go文件中,暂时的路由添加没有太大的问题,但是根据以往的项目开发经验,如果这个系统对外分享的话,之后在做大项目的时候,会遇到添加很多路由的情况,然后就会发现文件变的越来越大,关键是路由还放在了main.go文件中,这个实在是太麻烦了,于是今天做了下少许的改动。每次我都会将自己实践的代码放到github上并且都会打一个tag,方便后面用的同学使用,这里我以下面分支的代码进行实践分享1、改动main.go文件
近段时间重新对我的Web应用程序进行了一些思考,首先程序启动的main.go文件中,暂时的路由添加没有太大的问题,但是根据以往的项目开发经验,如果这个系统对外分享的话,之后在做大项目的时候,会遇到添加很多路由的情况,然后就会发现文件变的越来越大,关键是路由还放在了main.go文件中,这个实在是太麻烦了,于是今天做了下少许的改动。
每次我都会将自己实践的代码放到github上并且都会打一个tag,方便后面用的同学使用,这里我以下面分支的代码进行实践分享
https://github.com/durban89/typescript_demo.git tag: 1.0.12
1、改动main.go文件
将原来的
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)
用下面的代码替换掉
router.Routes()
这样我们将路由这一块的逻辑分到一个负责路由的文件来做处理,这样main.go文件就看起来很简洁。
2、添加router.go
创建文件router/router.go,添加代码如下
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文件的目的。
3、测试
在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
以上所述就是小编给大家介绍的《Go基础学习记录 - 编写Web应用程序 - 路由和程序启动的一些思考》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:- 小程序封装路由文件和路由方法,5种路由方法全解析
- 小程序无限层级路由方案
- 可能是最好用的 Taro 小程序路由库
- 小程序·云开发的云函数路由高级玩法
- vue路由篇(动态路由、路由嵌套)
- Vue的路由及路由钩子函数
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
C算法(第二卷:图算法)(第3版)
塞德威克(Sedgewick Robert) / 周良忠 / 第1版 (2004年1月1日) / 2004-4 / 38.0
《C算法(第2卷)(图算法)(第3版)(中文版)》所讨论的图算法,都是实际中解决图问题的最重要的已知方法。《C算法(第2卷)(图算法)(第3版)(中文版)》的主要宗旨是让越来越多需要了解这些算法的人的能够掌握这些方法及基本原理。书中根据基本原理从基本住处开始循序渐进地讲解,然后再介绍一些经典方法,最后介绍仍在进行研究和发展的现代技术。精心挑选的实例、详尽的图示以及完整的实现代码与正文中的算法和应用......一起来看看 《C算法(第二卷:图算法)(第3版)》 这本书的介绍吧!