分享
  1. 首页
  2. 文章

Go基础学习记录 - 编写Web应用程序 - 路由和程序启动的一些思考

DurbanZhang · · 2276 次点击 · · 开始浏览
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

近段时间重新对我的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大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

关注微信
2276 次点击
暂无回复
添加一条新回复 (您需要 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传

用户登录

没有账号?注册
(追記) (追記ここまで)

今日阅读排行

    加载中
(追記) (追記ここまで)

一周阅读排行

    加载中

关注我

  • 扫码关注领全套学习资料 关注微信公众号
  • 加入 QQ 群:
    • 192706294(已满)
    • 731990104(已满)
    • 798786647(已满)
    • 729884609(已满)
    • 977810755(已满)
    • 815126783(已满)
    • 812540095(已满)
    • 1006366459(已满)
    • 692541889

  • 关注微信公众号
  • 加入微信群:liuxiaoyan-s,备注入群
  • 也欢迎加入知识星球 Go粉丝们(免费)

给该专栏投稿 写篇新文章

每篇文章有总共有 5 次投稿机会

收入到我管理的专栏 新建专栏