问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

golang做api用什么框架(golangopenapi)

发布网友 发布时间:2024-09-29 20:27

我来回答

1个回答

热心网友 时间:2024-10-19 02:37

GoLang--Gin框架

?何为框架:

框架一直是敏捷开发中的利器,能让开发者很快的上手并做出应用,甚至有的时候,脱离了框架,一些开发者都不会写程序了。成长总不会一蹴而就,从写出程序获取成就感,再到精通框架,快速构造应用,当这些方面都得心应手的时候,可以尝试改造一些框架,或是自己创造一个。

Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,已经发布了1.0版本。具有快速灵活,容错方便等基塌敏特点。其实对于golang而言,web框架的依赖要远比Python,Java之类的要小。自身的net/http足够简单,性能也非常不错。框架更像是一些常用函数或者工具的集合。借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范。

(1)首先需要安装,安装比较简单,使用goget即可

gogetgithub.com/gin-gonic/gin

如果安装失败,直接去Githubclone下来,放置到对应的目录即可。

(2)代码中使用:

下面是一个使用Gin的简单例子:

packagemain

import(

"github.com/gin-gonic/gin"

)

funcmain(){

router:=gin.Default()

router.GET("/ping",func(c*gin.Context){

c.JSON(200,gin.H{

"message":"pong",

})

})

router.Run(":8080")//listenandserveon0.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匹配参数

我们可以使用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.Paramc.Queryc.PostForm)

请求方法精准匹配

支持404处理

快速的返回给客户端数据,常用的c.Stringc.JSONc.Data

golang性能测试框架k6源码分析

k6是新兴的性能测试框架,比带枯肩jmeter,另外测试脚本使用js,更加适合自动化的架构。

k6启动的框架是使用golang的cli标准框架cobra,入口函数

进入cobra框架后,我们直接查看getRunCmd,这个是命令run的入口,主要工作都是从这里开始。

重点关注初始化Runner,这个是通过js脚本,使用goja库解析后,生成的实际执行单元。

进入js目录,查看Runner的清凳结构,runner.go

Runner有一些配置属性,另外还有方法,方法用lib.Runner的接口进行规范。

Runner有一个NewVU方法,里面定义了连接参数,实现api测答行旅试

返回主函数,在初始化完成Runner后,启动调度器,以及做结果收集

最终封装成一个engine

启动测试

有没有人用golang实现过restful框架的实例

通过beego快速创建一个Restful风格API项目及API文档自动化:

Go语言构建RESTfulWeb服务:

Golang中使用JWT认证来保障RestfulJSONAPI的安全(英文):

polaris:一个用go实现的支持restful的web框架:

关于RESTFULAPI安全认证方式的一些总结:

有没有人用golang实现过restful框架的实例:

Micro一世仔颤个用Go语言实现的微服务框架:

基于微服务库的可插拔RPCgo-micro:

golang适合做web开发吗?:

a-survey-of-5-go-web-frameworks:

OzzoFramework:

avelino/awesome-go:

BeegoFramework:

golang其实不适合做web开发:

Go语言现有Web开发框架:

使用Golang快速构建WEB应用:

Martini极好的搜败GoWEB框架:

golang有哪些比较稳定的web开发框架戚带?:

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
压轴是倒数第二的意思吗? DNF 感觉资料站的喷人的真是好多 大料是什么(大料是什么东西) 大哥户口迁出去二十多年现在还可可以享受到农田补贴吗? 不是本村人农田可以确权吗 农村户口转出老家农田可以种吗 丈夫去世后自动离婚吗? 光遇注销怎么申诉 旧的不去新的不来怎么造句 我想找一张恶魔的图片当纹身.天使类型的.3对翅膀都是张开的.手也是张开... 什么是用人单位最看重的数字 特朗普成为美国总统的原因 爆炒鱿鱼的做法,爆炒鱿鱼怎么做 下列属于递延年金特点的有( )。 递延年金 是什么意思 递延年金 是什么 淘宝小类目产品有哪些?绝密淘宝小类目介绍! 1939年属兔的是什么命 属兔人的性格和脾气 1939,沪上秘闻的歌词是什么? 1939是什么意思? 有什么股票可以当天买卖 前端页面遇到稀有字体如何处理 为什么电脑上下载的软件有的字体无法显示(比如酷狗音乐软件里的有些... 感冒嗓子痒想咳嗽怎么办 感冒咳嗽嗓子痒怎么办 感冒了嗓子痒咳嗽怎么办 黏糊是什么意思?有哪些近义词? 企业破产有法人代表吗?怎么承担民事责任? 2012年中考 438.2永定一中能定向吗? 永定一中2010中考录取分数什么时候出来 如何判断山岩翠绿茶的品质? 如何选购口感比较好的山岩翠绿? 如何选购品质好的山岩翠绿茶? 如何选购口感好的山岩翠绿? 山岩翠绿的泡茶方法有哪些? 义勇军进行曲是电影什么的主题曲那部电影是义勇军进行曲的主题曲 苹果官网取消订单多久退款到账? 为什么说《中华民国临时约法》具有反对封建专制制度的进步意义?_百度... 为什么说《中国民国临时约法》具有反对封建专制制度的 近代史 中华民国临时约法为什么说《中华 临时约法的反封建专制制度的进步意义 如何理解《中华民国临时约法》 我家的厨房水龙头坏了漏水 ,请问那里可以下到水龙头的机构图 ,寡人不... 经常喝茶能养肝?肝不好的人,试试这3种花茶! 一个长方形土地周长为1600米,如果每公顷栽164株花,共栽多少棵?如果每三... 一块正方形瓜地,周长是1600米,如果每公顷喷洒120千克农药。这块瓜地需... 一个正方形果园,周长是2000米。如果每公顷种200棵梨树,这个果园一共... 一个正方形果园,周长是1200米。如果平均每公顷载300棵梨树,这个果园一... 一个苹果园周长是1600米.如果每公顷果园一年收苹果14.5吨,那么这个果 ... 抖音发什么时间的视频最好呢?