一个新的 类似express / connect,但更高性能的轻量级 web 框架
发布于 7 年前 作者 vincentLiuxiang 4354 次浏览 来自 分享

楼主工作主要开发语言是 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 的中间件生态),还不多,感兴趣的朋友也可以和我一起开发。

7 回复

给我一个不用 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 有几个比较著名的项目,也这么打印。。。哈哈,有点臭不要脸之嫌

回到顶部