最近接触 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-08-20 17:39:56 +08:00
大佬大佬
|
2
Ritter 2019-08-20 17:41:46 +08:00
star 了 xueo 习一下
|
3
ziyue002 2019-08-20 17:58:42 +08:00
不错 支持~
|
4
befovy 2019-08-20 18:02:17 +08:00 via iPhone
大佬这是 7 天工作之余的时间吗
|
5
fyyz 2019-08-20 18:02:41 +08:00
我也在做类似的,但是我觉得路由可以做正则表达式支持
比如:/product/page/{{ ^[0-9]*$ }} |
6
wsseo 2019-08-20 18:11:27 +08:00
所以为什么要造轮子
|
7
fireindark 2019-08-20 18:44:55 +08:00
感觉 gin 的 router 有点坑爹
|
8
gzdaijie OP @befovy #4 996 后还熬夜+周日写的,看提交时间就知道有多惨了。不过每天的内容就 50 行以内,大部分时间在思考如何实现,代码其实很少。
|
10
jaskle 2019-08-20 18:52:52 +08:00 via Android
自己用没有必要搞一些花里胡哨的路径匹配,内容合适基本也就定死几个常用的,所以自己封装也并不困难,而且也好控制内容,但个人感觉顺手是关键
|
11
gzdaijie OP @fyyz @fireindark @jaskle
gin 一开始的版本 router 不是自己实现的,而是直接使用了开源的 httprouter,后来不知道为啥自己实现了,功能的确很弱。我实现的也只支持 /:name /*file 这两种。/:name 是普通的参数解析,/*file 是为了支持静态服务器,需要匹配多级子路径。gorouter,是个国人造的轮子,用的人也蛮多的,支持正则解析等复杂场景,可以参考下。 |