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

栏目: Go · 发布时间: 5年前

内容简介:近段时间重新对我的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应用程序 - 路由和程序启动的一些思考》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

数据库索引设计与优化

数据库索引设计与优化

【美】Tapio Lahdenmaki、【美】Michael Leach / 曹怡倩、赵建伟 / 电子工业出版社 / 2015-6 / 79.00元

《数据库索引设计与优化》提供了一种简单、高效、通用的关系型数据库索引设计方法。作者通过系统的讲解及大量的案例清晰地阐释了关系型数据库的访问路径选择原理,以及表和索引的扫描方式,详尽地讲解了如何快速地估算SQL 运行的CPU 时间及执行时间,帮助读者从原理上理解SQL、表及索引结构、访问方式等对关系型数据库造成的影响,并能够运用量化的方法进行判断和优化,指导关系型数据库的索引设计。 《数据库索......一起来看看 《数据库索引设计与优化》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具