很舒服的web框架:neo——推荐了解nodejs的koa的用户使用

golang下,中间件式的web框架,之前介绍过 gin和echo的对比。

作为性能最高的两个近似框架,也拥有相同的坑爹之处:

  • 路由不照编写排序,打乱的树形路由之间到处冲突,路由设计极不友好。

  • 为避免冲突,rest路由只好越写越长,毫无简洁感。

  • 同时,ehco调试信息少得可怜,路由冲突了也不报错,严重耽误时间。

  • 而gin命名不符合一般常识,小别扭很多。比如,方法要大写:Post要写POST;路径/*key/ 解析出来带 “/“号,要自己去掉;作者还是学生,忙于青春事务;

于是,我们决定地毯式搜索,寻找一个按代码顺序解析的路由,同时命名正常舒服,像nodejs的koa那样顺手的轻量级框架。

在试用了一堆框架后,还真发现了这个超舒服的框架:neo
https://github.com/ivpusic/neo

德国人写的轻量级框架,和 nodejs 的Koa、exrpess 风格非常接近。

完善的中间件、包装有上下文、正常顺序路由、支持通配符、正常的命名方式。上手各种舒服~~

同时,作者似乎在一家从事云服务的公司,因此框架可持续发展基本可以保障了~~

目前,这个框架似乎没有任何宣传过,没什么人知道。但是,如果你也觉得gin的路由使用不便,那么neo就是紧挨在gin旁边的最佳选择。


  • update: 4-6楼提出的小问题已经全部修掉

共 11 个回复


Comdex

beego和macaron也不错啊

# 0

heimeil

https://volatile.whitedevops.com
这个也是类koa的框架,核心实现只有100行左右代码,即简洁又优雅,逻辑又清晰,只是中间件很少,有兴趣的可以来贡献点中间件。

# 1

butaixianran

volatile之前有看过,核心不提供路由是非常明智的做法。

但是现在自带的router 不太舒服。居然是直接写正则,基本把人都吓跑了。

# 2

gomgo

不过从neo框架的价绍来看,其作者很是粗心大意。

http://ivpusic.github.io/neo/tutorials/2015/01/22/static-file-serving.html

Now if we navigate to /static/js/script.js or /static/js/stylesheet.css we will get content of those files.

// /static/js/stylesheet.css 很明显是错误

http://ivpusic.github.io/neo/tutorials/2015/01/22/templates.html

app.Get(“/“, func(ctx neo.Ctx) (int, error) {
return 200, ctx.Res.Tpl(“index”, nil)
})

// func(ctx neo.Ctx) 很明显也是错误

作者不是很认真的哈

# 3

gomgo

更让人受不了的是
http://ivpusic.github.io/neo/tutorials/2015/01/22/clitool.html

neo new -t template-name app-name

example:

neo new -t html myapp
cd myapp
neo run main.go

请你按照去做一下,报错。根本运行不起来。(win10环境下)

需自己 再手动改一下代码才行
我晕呢

只要没有流行起来的框架都有原因的,github stars 很少的,除非你很有时间,或者特别有需要,不建议尝试。

# 4

ohoh

// Representing context for this request.
type Ctx struct {
    ebus.EBus

    // Wrapped http.Request object.
    Req *Request

    // Object with utility methods for writing responses to http.ResponseWriter
    Res *Response

    // Context data map
    Data CtxData

    // gorm transaction (if you need it in your application).
    // If you use this Tx instance, you should start it somewhere before.
    // When exception happens, neo will automatically rollback transaction, if started.
    Tx *gorm.DB

    // Flag to give information if Rollback method was invoked.
    TxDidRollback bool

    // general purpose session instance
    Session Session
}

context就集成了gorm,耦合度不高啊

# 5

butaixianran

@ohoh @gomgo

hi, @ohoh, @gomgo

那个命令行工具的小bug已修掉。文档中的错误也改了。

代码中自带的gorm.DB已经去掉了。

neo我们的感觉是这样:99.99%都很不错,各种舒服,确实剩下了一丁点小瑕疵,但都是属于轻易就能修掉的。

关键是,作者对需求的理解是合理的,就不会有大的坑爹。

neo我们已经在用了,也在帮忙贡献。

我们连新版的文档都换了:

没有流行,是因为gin的成熟和优秀,把它盖住了。一般来说,是优先选择gin。

但gin也确实有本文提到的那些问题,而且那些都是定死了,gin根本不会去改的。

所以如果想要避开那些问题,又享受类似的优秀,neo最接近。

# 6

dxvgef

用tango的飘过

# 7

K01

login.Post(“/test”, func(ctx *neo.Ctx) (int, error) {
parsed := &myType{}
err := ctx.Req.JsonBody(parsed)
if err != nil {
return 200, ctx.Res.Text(err.Error())
}
return 200, ctx.Res.Text(“OK”)
})

始终输出如下错误:"invalid character '-' in numeric literal"
# 8

painkiller0513

开始尝试使用neo,感觉设计挺好的,目前用来开发微信小程序后端。问题来了,怎么配置为支持https呢?这是微信要求的。

# 9

iPixelOldC

@painkiller0513
…你可以反向代理啊。。。我就是在Nginx上部署证书,然后写个反向代理,让Golang写的Web应用用上https。。。不过也有可能有更好的方法吧,但是我不知道啊2333

# 10