GoLang -- Gin框架? 何为框架go语言有没有框架:
框架一直是敏捷开发中go语言有没有框架的利器,能让开发者很快的上手并做出应用,甚至有的时候,脱离了框架,一些开发者都不会写程序了 。成长总不会一蹴而就,从写出程序获取成就感 , 再到精通框架,快速构造应用,当这些方面都得心应手的时候,可以尝试改造一些框架,或是自己创造一个 。
Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,已经发布了1.0版本 。具有快速灵活 , 容错方便等特点 。其实对于golang而言,web框架的依赖要远比Python,Java之类的要小 。自身的net/http足够简单,性能也非常不错 。框架更像是一些常用函数或者工具的集合 。借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范 。
(1)首先需要安装,安装比较简单,使用go get即可
go getgithub.com/gin-gonic/gin
如果安装失败,直接去Github clone下来,放置到对应的目录即可 。
(2)代码中使用go语言有没有框架:
下面是一个使用Gin的简单例子:
package main
import (
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
router.GET("/ping", func(c *gin.Context) {
c.JSON(200, gin.H{
"message": "pong",
})
})
router.Run(":8080") // listen and serve on 0.0.0.0:8080
}
简单几行代码,就能实现一个web服务 。使用gin的Default方法创建一个路由handler 。然后通过HTTP方法绑定路由规则和路由函数 。不同于net/http库的路由函数,gin进行了封装,把request和response都封装到gin.Context的上下文环境 。最后是启动路由的Run方法监听端口 。麻雀虽小 , 五脏俱全 。当然,除了GET方法,gin也支持POST,PUT,DELETE,OPTION等常用的restful方法 。
Gin可以很方便的支持各种HTTP请求方法以及返回各种类型的数据,详情可以前往查看 。
2.1 匹配参数
go语言有没有框架我们可以使用Gin框架快速的匹配参数,如下代码所示:
冒号:加上一个参数名组成路由参数 。可以使用c.Param的方法读取其值 。当然这个值是字串string 。诸如/user/rsj217 , 和/user/hello都可以匹配,而/user/和/user/rsj217/不会被匹配 。
浏览器输入以下测试:
返回结果为:
其中c.String是gin.Context下提供的方法 , 用来返回字符串 。
其中c.Json是gin.Context下提供的方法,用来返回Json 。
下面我们使用以下gin提供的Group函数,方便的为不同的API进行分类 。
我们创建了一个gin的默认路由,并为其分配了一个组 v1,监听hello请求并将其路由到视图函数HelloPage,最后绑定到 0.0.0.0:8000
C.JSON是Gin实现的返回json数据的内置方法,包含了2个参数,状态码和返回的内容 。http.StatusOK代表返回状态码为200 , 正文为{"message": “welcome"} 。
注:Gin还包含更多的返回方法如c.String, c.HTML, c.XML等,请自行了解 。可以方便的返回HTML数据
我们在之前的组v1路由下新定义一个路由:
下面我们访问
可以看到 , 通过c.Param(“key”)方法,Gin成功捕获了url请求路径中的参数 。同理,gin也可以捕获常规参数,如下代码所示:
在浏览器输入以下代码:
通过c.Query(“key”)可以成功接收到url参数,c.DefaultQuery在参数不存在的情况下,会由其默认值代替 。
我们还可以为Gin定义一些默认路由:
这时候,我们访问一个不存在的页面:
返回如下所示:
下面我们测试在Gin里面使用Post
在测试端输入:
附带发送的数据,测试即可 。记住需要使用POST方法.
继续修改,将PostHandler的函数修改如下
测试工具输入:
发送的内容输入:
返回结果如下:
备注:此处需要指定Content-Type为application/x-www-form-urlencoded,否则识别不出来 。
一定要选择对应的PUT或者DELETE方法 。
Gin框架快速的创建路由
能够方便的创建分组
支持url正则表达式
支持参数查找(c.Param c.Query c.PostForm)
请求方法精准匹配
支持404处理
快速的返回给客户端数据,常用的c.String c.JSON c.Data
golang 有哪些比较稳定的 web 开发框架第一个:Beego框架
Beego框架是astaxie的GOWeb开发的开源框架 。Beego框架最大的特点是由八个大的基础模块组成,八大基础模块的特点是可以根据自己的需要进行引入,模块相互独立,模块之间耦合性低 。
相应的Beego的缺点就是全部使用时比较臃肿 , 通过bee工具来构建项目时,直接生成项目目录和耦合关系 , 从而会导致在项目开发过程中受制性较大 。
第二个:Gin框架
Gin是一个GOlang的微框架 , 封装比较优雅,API友好,源码注释比较明确,已经发布了1.0版本;具有快速灵活、容错方便等特点,其实对于golang而言,web框架的依赖远比Python、Java更小 。
目前在很多使用golang的中小型公司中进行业务开发,使用Gin框架的很多,大家如果想使用golang进行熟练Web开发,可以多关注一下这个框架 。
第三个:Iris框架
Iris框架在其官方网站上被描述为GO开发中最快的Web框架,并给出了多框架和多语言之前的性能对比 。目前在github上,Iris框架已经收获了14433个star和1493个fork,可见是非常受欢迎的 。
在实际开发中,Iris框架与Gin框架的学习曲线几乎相同,所以掌握了Gin就可以轻松掌握Iris框架 。
第四个:Echo框架
也是golang的微型Web框架,其具备快速HTTP路由器、支持扩展中间件,同时还支持静态文件服务、Websocket以及支持制定绑定函数,制定相应渲染函数,并允许使用任意的HTML模版引擎 。
go语言web框架beego安装(go mod方式)go语言web框架beego安装(go mod方式)_不忘初心,方得始终-CSDN博客
重要:将bee命令放到GOROOT/bin目录下,这步很关键
cp bee /usr/local/go/bin/
注:或者可以将GOPATH/bin设置为环境变量
echo ’export PATH="PATH"'~/.bashrc
source ~/.bashrc
router路由下方法名要大写,访问权限
wq保存
生效环境变量:source /etc/profile
go build -o abc.exe可指定编译后的文件名
Golang常用环境变量说明与设置详解
环境变量GOBIN表示我们开发程序编译后二进制命令的安装目录 。
当我们使用go install命令编译和打包应用程序时,该命令会将编译后二进制程序打包GOBIN目录,一般我们将GOBIN设置为GOPATH/bin目录 。
export GOBIN=$GOPATH/bin
Go get包管理mod
windows下默认项目路径在go安装目录的src下(beego)
go语言的webengine叫什么Java教程
Linux入门
更多
首页
?
Go语言WEB框架(Gin)详解
在 Go语言开发的 Web 框架中,有两款著名 Web 框架分别是 Martini 和 Gin , 两款 Web 框架相比较的话,Gin 自己说它比 Martini 要强很多 。
Gin 是 Go语言写的一个 web 框架,它具有运行速度快,分组的路由器 , 良好的崩溃捕获和错误处理,非常好的支持中间件和 json 。总之在 Go语言开发领域是一款值得好好研究的 Web 框架,开源网址:
【go语言有没有框架 go语言gui框架】首先下载安装 gin 包:
go get -u github.com/gin-gonic/gin
一个简单的例子:
package main
import "github.com/gin-gonic/gin"
func main() {
//Default返回一个默认的路由引擎
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {
//输出json结果给调用方
c.JSON(200, gin.H{
"message": "pong",
})
})
r.Run() // listen and serve on 0.0.0.0:8080
}
编译运行程序,打开浏览器,访问页面显示:
{"message":"pong"}
gin 的功能不只是简单输出 Json 数据 。它是一个轻量级的 WEB 框架,支持 RestFull 风格 API,支持 GET,POST,PUT,PATCH,DELETE,OPTIONS 等 http 方法,支持文件上传,分组路由,Multipart/Urlencoded FORM,以及支持 JsonP,参数处理等等功能,这些都和 WEB 紧密相关,通过提供这些功能,使开发人员更方便地处理 WEB 业务 。
Gin 实际应用
接下来使用 Gin 作为框架来搭建一个拥有静态资源站点,动态 WEB 站点,以及 RESTFull API 接口站点(可专门作为手机 APP 应用提供服务使用)组成的,亦可根据情况分拆这套系统,每种功能独立出来单独提供服务 。
下面按照一套系统但采用分站点来说明,首先是整个系统的目录结构,website 目录下面 static 是资源类文件 , 为静态资源站点专用;photo 目录是 UGC 上传图片目录,tpl 是动态站点的模板 。
当然这个目录结构是一种约定,可以根据情况来修改 。整个项目已经开源,可以访问来详细了解:具体每个站点的功能怎么实现呢?请看下面有关每个功能的讲述:
静态资源站点
一般网站开发中 , 我们会考虑把 js,css,以及资源图片放在一起,作为静态站点部署在 CDN , 提升响应速度 。采用 Gin 实现起来非常简单,当然也可以使用 net/http 包轻松实现,但使用 Gin 会更方便 。
不管怎么样,使用 Go 开发,我们可以不用花太多时间在 WEB 服务环境搭建上,程序启动就直接可以提供 WEB 服务了 。
package main
import (
"net/http"
"github.com/gin-gonic/gin"
)
func main() {
router := gin.Default()
// 静态资源加载,本例为css,js以及资源图片
router.StaticFS("/public", http.Dir("D:/goproject/src/github.com/ffhelicopter/tmm/website/static"))
router.StaticFile("/favicon.ico", "./resources/favicon.ico")
// Listen and serve on 0.0.0.0:80
router.Run(":80")
}
首先需要是生成一个 Engine,这是 gin 的核心,默认带有 Logger 和 Recovery 两个中间件 。
router := gin.Default()
StaticFile 是加载单个文件,而 StaticFS 是加载一个完整的目录资源:
func (group *RouterGroup) StaticFile(relativePath, filepath string) IRoutes
func (group *RouterGroup) StaticFS(relativePath string, fs http.FileSystem) IRoutes
这些目录下资源是可以随时更新,而不用重新启动程序 。现在编译运行程序 , 静态站点就可以正常访问了 。
Golang web 框架对比由于 golang 提供了完善的net/http标准库,基于该标准库实现一个web框架的难度相比其他语言低了不少,所以go web框架简直就是百花齐放 。从老牌的revel和 beego,到新出的 gin , 和 iris 等,而且还有一些类似于 chi 这种router 。个人一般小项目 , 尤其是中间件需要暴露一些http接口的,基本就使用chi即可 。
本次测试主要是gin iris echo 这三个框架 。侧重在于高性能,从并发和json序列化和反序列化两个方面来测评,毕竟后台项目侧重的也就是这两个方面 。
为了选择符合重IO的框架 , 现设定如下场景的demo,demo的具体要求如下:
gin:
iris:
echo:
由于要测试5种body样本 , 4种场景,4个框架,因此把重点数据筛选出来(吞吐量、错误率和99%Line,重要性依次递减),结果都绘制了图形,方便比对查看 。
综合以上各个测试结果可以看出,gin以及iris都是非常优秀的框架,gin的优势比其他稍微大点 , iris次之,而echo相应差一点 。
本次测试只是简单测试了一下3个框架的并发和json相关 。对比结果,不包括生态和工具的完善度等等 。如果测试有什么不完善的地方,欢迎交流 。
另外欢迎大家试用和star另外一个web框架 baa,为了避嫌我没有贴出baa的数据,性能测试处于gin之后和iris之间 。
go有没有开源的类似java的mina或者netty的socket框架mina与netty都是Trustin Lee的作品,所以在很多方面都十分相似,他们线程模型也是基本一致,采用了Reactors in threads模型 , 即Main ReactorSub Reactors的模式 。由main reactor处理连接相关的任务:accept、connect等,当连接处理完毕并建立
go语言有没有框架的介绍就聊到这里吧 , 感谢你花时间阅读本站内容,更多关于go语言gui框架、go语言有没有框架的信息别忘了在本站进行查找喔 。
推荐阅读
- 大学生如何运用网络新媒体阵地,大学生如何正确使用媒体
- word如何取消背景,如何取消word里面的背景
- pdf转excelmac,pdf转ppt简单方法
- 关于go语言整数使用int的信息
- 电商如何开展论坛营销,电商论坛app
- 剑法动作游戏,剑法基本动作名称
- 酒吧拍摄用什么灯好一点,酒吧拍摄技巧 参数
- php遇到大数据流量 php大数据处理
- java重置事件代码,java重置按钮代码