wego Go 语言 Web 框架开源项目

我要开发同款
匿名用户2022年02月24日
131阅读

技术信息

开源地址
https://gitee.com/mirrors/wego
授权协议
Apache

作品详情

wego是一个Go语言编写的高性能的Web框架,可以用来快速开发RESTful服务以及后端服务等各种应用。

wego框架是一个完整的MVC框架,包括路由模块、数据库ORM模块、view模板处理以及Sessio模块。

wego具有性能高、方便易用,兼容性好,扩展性强等特点,具体特征如下:

基于Radix树开发的路由模块,路由查询性能高。支持路由组。为路由参数、Query参数、Form参数的访问提供率方便易于使用的API,并可以将参数映射到Struct。为JSON、XML和HTML渲染提供了易于使用的API。支持过滤器中间件,方便您对Web框架进行扩展。支持BeforeRoute、BeforeExec、AfterExec拦截器,方便您进行身份验证、日志输出。内置Crash处理机制,wego可以recover一个HTTP请求中的paic,这样可确保您的服务器始终可用。内置Cofig模块,方便对应用的参数进行管理。内置Sessio模块,您可以选择cookie、redis、memcache、memory缓存引擎存储Sessio数据。支持混合路由,固定路由、参数路由、通配符路由可以混合,不冲突。内置log模块,用于生成应用日志。采用缓存来管理HTML的Template,既方便输出Html页面,又可以使用缓存提升系统性能。良好的兼容性,wego支持go原生的fuc(http.ResposeWriter,*http.Request)路由处理函数,这样您的代码少量修改就可以使用wego了。wego兼容两种编码习惯,可以使用普通函数作为路由处理函数,也可以使用strcut的成员函数作为路由处理函数。安装gogetgithub.com/hamig123/wego

使用文档请点击:详细文档

简单httpserver创建一个mai.go文件,代码如下:

packagemaiimport("wego"log"wego/dlog")fucmai(){web,err:=wego.NewWeb()iferr!=il{log.Error(err)retur}web.GET("/hello",fuc(c*wego.WebCotext){c.WriteText(200,"world")})err=web.Ru(":8080")iferr!=il{log.Error(err)}}然后运行它,打开浏览器,输入https://localhost:8080/hello, 就可以看到如下内容:

world项目结构wego框没有对项目结构做出限制,这里给出一个MVC框架项目的建议结构:

demo├──app│└──router.go-路由配置文件│└──templfu.go-模板函数文件├──cotrollers-控制器目录,必要的时候可以继续划分子目录│└──cotroller_xxx.go├──models-模型目录│└──model_xxx.go├──logs-日志文件目录,主要保存项目运行过程中产生的日志│└──applog_20211203.log├──static-静态资源目录│├──css│├──img│└──js├──utils-公共代码目录│└──util_xxx.go├──views-视图模板目录│└──html_xxx.html├──app.cof-应用配置文件└──mai.go-入口文件注册参数路由fucmai(){web,err:=wego.NewWeb()iferr!=il{log.Error(err)retur}web.PATH("/user/:id",fuc(c*wego.WebCotext){c.WriteTextF(200,"paramid=%s",c.RouteParam.GetStrig("id").Value)})err=web.Ru(":8080")iferr!=il{log.Error(err)}}注册模糊匹配路由fucmai(){web,err:=wego.NewWeb()iferr!=il{log.Error(err)retur}web.PATH("/files/*ame",fuc(c*wego.WebCotext){c.WriteTextF(200,"paramame=%s",c.RouteParam.GetStrig("ame").Value)})err=web.Ru(":8080")iferr!=il{log.Error(err)}}注册RESTful路由fucmai(){web,err:=wego.NewWeb()iferr!=il{log.Error(err)retur}web.GET("/users/:id",fuc(c*wego.WebCotext){//查询一个用户})web.POST("/users/:id",fuc(c*wego.WebCotext){//创建一个用户})web.PUT("/users/:id",fuc(c*wego.WebCotext){//更新用户信息})web.PATCH("/users/:id",fuc(c*wego.WebCotext){//更新用户的部分信息})web.DELETE("/users/:id",fuc(c*wego.WebCotext){//删除用户})err=web.Ru(":8080")iferr!=il{log.Error(err)}}获取参数在wego中通过c.Param.GetXXX函数来获取请求参数:

fucmai(){web,err:=wego.NewWeb()iferr!=il{log.Error(err)retur}web.GET("/user",fuc(c*WebCotext){ame:=c.Param.GetStrig("ame")ifame.Error!=il{t.Error(ame.Error)}age:=c.Param.GetIt("age")ifage.Error!=il{t.Error(age.Error)}c.WriteText(200,ame.Value)})err=web.Ru(":8080")iferr!=il{log.Error(err)}}使用MustXXX便捷函数获取参数fucmai(){web,err:=wego.NewWeb()iferr!=il{log.Error(err)retur}web.GET("/user",fuc(c*WebCotext){ame:=c.Param.MustStrig("ame")t.Log(ame)age:=c.Param.MustIt("age")t.Log(age)})err=web.Ru(":8080")iferr!=il{log.Error(err)}}使用ReadJSON获取参数若POST请求中Body的数据的格式为JSON格式,可以直接使用WebCotext的ReadJSON函数来读取:

fucmai(){web,err:=wego.NewWeb()iferr!=il{log.Error(err)retur}web.POST("/user",fuc(c*WebCotext){varuser2Usererr:=c.ReadJSON(&user2)iferr!=il{t.Log(err)}t.Log(user2)})err=web.Ru(":8080")iferr!=il{log.Error(err)}}输出JSON数据wego对于JSON的支持非常好,可以让我们非常方便的开发一个基于JSON的API。若要返回JSON请求结果,您可以使用WriteJSON函数:

fucwriteJso(c*wego.WebCotext){varuserUseruser.ID=1user.Name="demo"user.Age=12c.WriteJSON(200,user)}输出HTML数据wego框架的html结果的输出是基于html/template实现的。以下是一个输出html页面的例子:

fucwriteHtml(c*wego.WebCotext){varuserUseruser.ID=1user.Name="demo"user.Age=12c.WriteHTML(200,"./views/idex.html",user)}使用模板函数如果您的模板文件中使用了模板函数,需要预先将所需的模板函数进行登记:

fucGetUserID(idit64)strig{returfmt.Spritf("ID_%d",id)}fucmai(){web,err:=wego.NewWeb()iferr!=il{log.Error(err)retur}wego.AddTemplFuc("GetUserID",GetUserID)web.GET("/templfuc",(c*wego.WebCotext){varuserUseruser.ID=1user.Name="lisi"user.Age=12c.WriteHTML(200,"./views/idex.html",user)})err=web.Ru(":8080")iferr!=il{log.Error(err)}}设置cookiefucsetCookie(c*wego.WebCotext){val,err:=c.Iput.Cookie("demo")iferr!=il{log.Error(err)}cookie:=&http.Cookie{Name:"demo",Value:"test",Path:"/",HttpOly:true,}c.SetCookie(cookie)}重定向fucmai(){web,err:=wego.NewWeb()iferr!=il{log.Error(err)retur}web.GET("/redirect",fuc(c*wego.WebCotext){c.Redirect(302,"/idex")})err=web.Ru(":8080")iferr!=il{log.Error(err)}}错误处理fucmai(){web,err:=wego.NewWeb()iferr!=il{log.Error(err)retur}web.GET("/abort",fuc(c*wego.WebCotext){ame:=c.Param.GetStrig("ame")ifame.Error!=il{c.AbortWithError(500,ame.Error)retur}c.WriteText(200,"hello"+ame.Value)})err=web.Ru(":8080")iferr!=il{log.Error(err)}}使用配置文件首先定义一个简单的配置文件#应用名称app_ame=demo#mysql数据库的配置参数mysql=root:rootpwd@tcp(127.0.0.1:3306)/demp?charset=utf8[server]#http监听端口http_port=8080使用IitWeb()函数初始化Web服务器fucmai(){web,err:=wego.IitWeb()iferr!=il{log.Error(err)retur}err=web.Ru()iferr!=il{log.Error(err)}}说明:调用IitWeb()函数时可以指定一个配置文件,若没有指定配置文件,则使用缺省的配置文件:./app.cof。

获取业务参数调用IitWeb()后wego会自动将系统参数解析到WebEgie.Cofig中,业务参数则需要用户自己调用配置数据的GetXXX函数来获取。例如:

fucmai(){web,err:=wego.IitWeb()iferr!=il{log.Error(err)retur}mysql_c:=web.Cofig.GetStrig("mysql")ifmysql_c.Error!=il{log.Error(mysql_c.Error)retur}log.Ifo(mysql_c.Value)err=web.Ru()iferr!=il{log.Error(err)}}使用Sessio首选定义配置文件:#应用名称app_ame=demo[server]#http监听端口http_port=8080[sessio]#sessio是否开启sessio_o=true#sessio类型:cookie、cachesessio_store=cookie#客户端的cookie的名称cookie_ame="wego"#sessio过期时间,单位秒life_time=3600#sessio数据的hash字符串hash_key=demohash然后在入口函数中加载配置文件fucmai(){web,err:=wego.NewWeb()iferr!=il{log.Error(err)retur}web.GET("/logi",logi)web.GET("/idex",idex)err=web.Ru(":8080")iferr!=il{log.Error(err)}}然后再logi处理器函数中保存sessio数据:fuclogi(c*wego.WebCotext){c.Sessio.Set("uid",1)c.Sessio.Save()c.Redirect(302,"/idex")}然后idex处理器函数中就可以访问sessio数据了:fucidex(c*wego.WebCotext){id,_:=c.Sessio.GetIt("uid")c.WriteTextF(200,"uid=%d",id)}输出日志packagemaiimportlog"wego/dlog"fucmai(){log.Debug("ThisisaDebugMessage")log.Ifo("ThisisaIfoMessage")}//执行后的输出结果为://2021/11/3007:20:06[D]mai.go:31ThisisaDebugMessage//2021/11/3007:20:06[I]mai.go:32ThisisaDebugIfo

 

 

功能介绍

wego是一个Go语言编写的高性能的Web框架,可以用来快速开发RESTful服务以及后端服务等各种应用。 wego框架是一个完整的MVC框架,包括路由模块、数据库ORM模块、view模板处理以...

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论