楼主工作主要开发语言是 node.js
============ update ============== 发这个主题,不是为了争论 谁的框架更好,仅仅是为了学习探讨。 lu 本身代码也就200多行,是很适合很多人去了解学习一个 web 框架原理的。
今天要介绍的 web 框架,是基于 Go 语言写的。https://github.com/vincentLiuxiang/lu 该项目已被 Go 著名项目 fasthttp 在官方推荐
大家先别着急喷!!! 大家先别着急喷!!! 大家先别着急喷!!!
所谓,技多不压身,多学一点东西总是好的。
故事前传
大约在半年前,我在给 connect ( connect 可以认为是更轻量级的 express ) 框架的作者提了一个可以提高性能的 pull request。
这个里是讨论链接:https://github.com/senchalabs/connect/pull/1085
该想法得到了作者的认可,但是对 connect 内部存储中间件的 stack 属性有一定的变化,作者担心会影响到正在使用 connect 的人。 为了向前兼容(其实是兼容的,只是如果用户使用了一些 connect 实例的内部属性,可能会有问题), 作者希望我的 pull request 可以写的更向前兼容一点。
于是我写了一个向前兼容,但是代码失去其优雅性的版本。
苦思冥想后,我放弃了 pull request 。 准备用 node.js 再造一个 与 connect api 完全一致的轮子,只是性能更高。
但是想想,觉得完全没有必要 那段时间正好在帮一个朋友解决一个 Go 项目的问题, 发现 Go 里面的开发框架要么非常重,要么完全没有 url 路由匹配,配合 next 触发的中间件的机制, 缺少像 node.js 这种可插拔的,又有 url 路由匹配配合 next 触发中间件机制的轻量级框架。
于是决定,把提给 connect 的想法用 Go 实现了一遍。
go 语言版 connect / express 框架 —— lu
其api 风格、 原理与 connect / express 非常像。
这个框架写出来也有半年多时间了,感觉埋在那里有点可惜。 最近有点空,决定出来宣传一下,核心代码不到300行,测试丰富,代码质量A+, 该项目已被 Go 著名项目 fasthttp 在官方首页推荐
希望多学点东西的朋友可以去看看,一起探讨,核心代码真的很少。 lu 目前配套的中间件(类似,express / koa 的中间件生态),还不多,感兴趣的朋友也可以和我一起开发。
给我一个不用 gin 的理由
仿照 express 的 go 框架 简直不要太多了吧
这个必须支持啊,加油,这段时间,正好在接触 go …
@jkjk77 没有不用的理由,爱用什么,用什么哈~
@DevinXian 可以线下探讨一下~ 这个项目不是基于 官方 net/http 模块的,是用的 fasthttp。 项目本身没有增加任何 fasthttp 以外的 api,也就是说,如果你知道 fasthttp 怎么用,lu 就是一样的用法,它本身几乎没有学习成本。
就像 connect 基于 http 模块,不像 express , connect 本身几乎没有增加 http 以外的api。
在模块 init 的时候打印版本号这个做法其实不太好吧?有时候别人用了你的模块,但是并不想在控制台中打印一些自己不想要的信息:
func init() {
version := "0.0.1"
fmt.Printf(` ___
| / .. )))
| | . . (((
| | . ||~~~~||
| |___ . | \__/ |
\_____/ \____/ ` + "version: " + version + "\n\n")
}
@leizongmin 这个。。。确实可以去掉。只是可惜了,这么好看的logo. 另外,go 有几个比较著名的项目,也这么打印。。。哈哈,有点臭不要脸之嫌