
最近接触 Golang,发现 Web 框架中 Gin 和 Flask 一样简洁啊。后来看了下源码就几千行。7 天撸了一个,代码刚好 500 行,七天写完,恰好有了 7 个 Star,每天的代码都放在单独的目录了。。
Github 求一波 Star: geektutu/7days-golang
教程更新到第二天了,写字比写代码累啊 动手撸 Web 框架 Gee
适合对 Golang Web 感兴趣的同学参考。使用效果和 Gin 一模一样
func main() { r := gee.Default() r.Use(gee.Logger()) // global midlleware r.GET("/", func(c *gee.Context) { c.HTML( http.StatusOK, "custom_func.tmpl", gee.H{ "title": "gee", "now": time.Date(2019, 8, 17, 0, 0, 0, 0, time.UTC), }) }) v2 := r.Group("/v2") v2.Use(onlyForV2()) // v2 group middleware { v2.GET("/hello/:name", func(c *gee.Context) { // expect /hello/geektutu c.String( http.StatusOK, "hello %s, you're at %s\n", c.Param("name"), c.Path) }) } r.Run(":9999") } 1 BORBER 2019 年 8 月 20 日 大佬大佬 |
2 Ritter 2019 年 8 月 20 日 star 了 xueo 习一下 |
3 ziyue002 2019 年 8 月 20 日 不错 支持~ |
4 befovy 2019 年 8 月 20 日 via iPhone 大佬这是 7 天工作之余的时间吗 |
5 fyyz 2019 年 8 月 20 日 我也在做类似的,但是我觉得路由可以做正则表达式支持 比如:/product/page/{{ ^[0-9]*$ }} |
6 wsseo 2019 年 8 月 20 日 所以为什么要造轮子 |
7 fireindark 2019 年 8 月 20 日 感觉 gin 的 router 有点坑爹 |
8 gzdaijie OP @befovy #4 996 后还熬夜+周日写的,看提交时间就知道有多惨了。不过每天的内容就 50 行以内,大部分时间在思考如何实现,代码其实很少。 |
10 jaskle 2019 年 8 月 20 日 via Android 自己用没有必要搞一些花里胡哨的路径匹配,内容合适基本也就定死几个常用的,所以自己封装也并不困难,而且也好控制内容,但个人感觉顺手是关键 |
11 gzdaijie OP @fyyz @fireindark @jaskle gin 一开始的版本 router 不是自己实现的,而是直接使用了开源的 httprouter,后来不知道为啥自己实现了,功能的确很弱。我实现的也只支持 /:name /*file 这两种。/:name 是普通的参数解析,/*file 是为了支持静态服务器,需要匹配多级子路径。gorouter,是个国人造的轮子,用的人也蛮多的,支持正则解析等复杂场景,可以参考下。 |