GO语言(十三):使用 Go 和 Gin 开发 RESTful API(下)当客户端在 发出POST请求时/albums,您希望将请求正文中描述go语言gin写个人博客的专辑添加到现有专辑数据中 。
为此,您将编写以下内容go语言gin写个人博客:
1、编写代码
a.添加代码以将专辑数据添加到专辑列表 。
在此代码中:
1)用于Context.BindJSON 将请求正文绑定到newAlbum 。
2) album将从 JSON 初始化的结构附加到albums 切片 。
3)向响应添加201状态代码,以及表示您添加的专辑的 JSON 。
b.更改您的main函数,使其包含该router.POST函数,如下所示 。
在此代码中:
1)将路径中的POST方法与 /albumspostAlbums函数相关联 。
使用 Gin,您可以将处理程序与 HTTP 方法和路径组合相关联 。这样,您可以根据客户端使用的方法将发送到单个路径的请求单独路由 。
a.如果服务器从上一节开始仍在运行 , 请停止它 。
b.从包含 main.go 的目录中的命令行,运行代码 。
c.从不同的命令行窗口,用于curl向正在运行的 Web 服务发出请求 。
该命令应显示添加专辑的标题和 JSON 。
d.与上一节一样,使用curl检索完整的专辑列表,您可以使用它来确认添加go语言gin写个人博客了新专辑 。
该命令应显示专辑列表 。
当客户端向 发出请求时GET /albums/[id],您希望返回 ID 与id路径参数匹配的专辑 。
为此,您将:
a.在您在上一节中添加的函数下方postAlbums,粘贴以下代码以检索特定专辑 。
此getAlbumByID函数将提取请求路径中的 ID,然后找到匹配的专辑 。
在此代码中:
(1)Context.Param用于从 URL 中检索id路径参数 。当您将此处理程序映射到路径时,您将在路径中包含参数的占位符 。
(2)循环album切片中的结构,寻找其ID 字段值与id参数值匹配的结构 。如果找到,则将该album结构序列化为 JSON,并将其作为带有200 OK HTTP 代码的响应返回 。
如上所述,实际使用中的服务可能会使用数据库查询来执行此查找 。
(3)如果找不到专辑,则返回 HTTP 404错误 。
b.最后,更改您的main,使其包含对router.GET的新调用,路径现在为/albums/:id,如以下示例所示 。
在此代码中:
(1)将/albums/:id路径与getAlbumByID功能相关联 。在 Gin 中 , 路径中项目前面的冒号表示该项目是路径参数 。
a.如果服务器从上一节开始仍在运行,请停止它 。
b.在包含 main.go 的目录中的命令行中 , 运行代码以启动服务器 。
c.从不同的命令行窗口,用于curl向正在运行的 Web 服务发出请求 。
该命令应显示您使用其 ID 的专辑的 JSON 。如果找不到专辑,您将收到带有错误消息的 JSON 。
恭喜go语言gin写个人博客!您刚刚使用 Go 和 Gin 编写了一个简单的 RESTful Web 服务 。
本节包含您使用本教程构建的应用程序的代码 。
go语言框架gin之集成swagger1.先安装Go对应的开源Swagger相关的库
go get github.com/swaggo/swag/cmd/swag
go get github.com/swaggo/gin-swagger
go get github.com/swaggo/files
go get github.com/alecthomas/template
2.验证是否安装成功:swag -v
3.针对接口写入注解
// @Summary 获取多个标签
// @Tags 标签
// @Producejson
// @Param name query string false "标签名称" maxlength(100)
// @Param state query int false "状态" Enums(0, 1) default(1)
// @Param page query int false "页码"
// @Param page_size query int false "每页数量"
// @Success 200 {object} model.TagSwagger "成功"
// @Failure 400 {object} errcode.Error "请求错误"
// @Failure 500 {object} errcode.Error "内部错误"
// @Router /api/v1/tags [get]
func (t Tag) List(c *gin.Context) {
}
// @Summary 新增标签
// @Tags 标签
// @Producejson
// @Param name body string true "标签名称" minlength(3) maxlength(100)
// @Param state body int false "状态" Enums(0, 1) default(1)
// @Param created_by body string false "创建者" minlength(3) maxlength(100)
// @Success 200 {object} model.Tag "成功"
// @Failure 400 {object} errcode.Error "请求错误"
// @Failure 500 {object} errcode.Error "内部错误"
// @Router /api/v1/tags [post]
func (t Tag) Create(c *gin.Context) {
}
// @Summary 更新标签
// @Tags 标签
// @Producejson
// @Param id path int true "标签ID"
// @Param name body string false "标签名称" minlength(3) maxlength(100)
// @Param state body int false "状态 (0为未删除、1为已删除)" Enums(0, 1) default(1)
// @Param modified_by body string true "修改者" minlength(3) maxlength(100)
// @Success 200 {array} model.Tag "成功"
// @Failure 400 {object} errcode.Error "请求错误"
// @Failure 500 {object} errcode.Error "内部错误"
// @Router /api/v1/tags/{id} [put]
func (t Tag) Update(c *gin.Context) {
}
4.针对整个项目进行注解 , 直接在main方法写入如下注解
//@title 项目名称
//@version 1.0
//@description 这里是描述
func main() {
5.生成执行 swag init
这时会在我项目的docs文件夹下面生成docs.go、swagger.json、swagger.yaml三个文件
6.要在routers中进行默认初始化和注册对应的路由:
r.GET("/swagger/*any", ginSwagger.WrapHandler(swaggerFiles.Handler))
同时要引用 _"blog-service/docs" ,不然会报错
7.查看接口文档 :
8.ok,完成
go语言的webengine叫什么Java教程
Linux入门
更多
首页
?
Go语言WEB框架(Gin)详解
在 Go语言开发的 Web 框架中,有两款著名 Web 框架分别是 Martini 和 Gin,两款 Web 框架相比较的话 , Gin 自己说它比 Martini 要强很多 。
Gin 是 Go语言写的一个 web 框架 , 它具有运行速度快 , 分组的路由器,良好的崩溃捕获和错误处理,非常好的支持中间件和 json 。总之在 Go语言开发领域是一款值得好好研究的 Web 框架,开源网址:
首先下载安装 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
这些目录下资源是可以随时更新,而不用重新启动程序 。现在编译运行程序,静态站点就可以正常访问了 。
go语言 python ruby,这三个怎么选择这选择显然是因人而异的 。。至于怎么选 , 要看你是初学者,还是老手? 。。对性能有要求,还是没要求?
如果是完全没有基础,我建议哪个都不选 , 如果非要选一个,那就选PYTHON 。。如果你是初学者,把网上的教程看个遍,再买上几本书 。。。你所学会的也仅仅是语法 , 而根本不会编程 。。。因为这些教程,也仅仅是教你语法,而没有教你编程 。。你甚至把网上的教程看个精光,却连个最基本的OA系统都做不出来 。。。只能在一个黑乎乎的控制台上,打印一堆破字符 。。
-------网上的所有教程都会教你的:
怎么定义一个变量?怎么在控制台打印变量?
怎么写一个循环?怎么在控制台打印一堆变量?
怎么写一个函数?怎么在控制台打印返回值?
怎么创建一个对象?怎么在控制台打印对象属性?
------高级一点的教程,会教你的:
怎么用PYTHON的模块,写一个爬虫?
怎么用RUBY的ROR框架,获取一个表单?
怎么用GO的beego,写一个博客?
-------而这些的教程,从来不教你的:
面向对象有什么用? 委托是什么?事件是什么? 工厂模式,单例模式,观察者模式,这些都是啥?套接字是啥?UDP是啥?TCP/IP是啥?二叉树是什么玩意?状态机又是什么玩意?啥叫逆变?啥叫协变?啥叫异步?啥叫反射?
---------------------------------------------------------------------------------------------
如果一套教程 , 要把这些都讲明白 。。。可能需要上千集 。。。所以这些教程 , 都跳过了这些内容 。。但如果你不明白这些,就根本学不会编程 。。。如果你打算学一门语言,而手上只有几十集教程 , 外加三五本书 。。。那你只能学会玩控制台 。。。
所以初学者选择一门语言,首先要保证这门语言作为主要开发语言,常年被公司使用,这样才能真正学会编程 。然而这三门语言都不具备这样的特点 。它们通常都是被当成第二语言 , 做一些辅助开发的工作 。其中Python只在极少数情况下,才被用来作为主要开发语言 。至于Go与Ruby , 我目前还没听说过它们有被当作主要开发语言的例子 。我所推荐的是从C#和JAVA两者之间 , 二选一 。。。学精其中一门之后 , 再来考虑PYTHON或GO作为第二语言 。。。不然无论你选哪个,都几乎不可能靠一门语言找到工作 。
GoLang -- Gin框架? 何为框架:
框架一直是敏捷开发中的利器go语言gin写个人博客,能让开发者很快的上手并做出应用go语言gin写个人博客,甚至有的时候,脱离go语言gin写个人博客了框架,一些开发者都不会写程序go语言gin写个人博客了 。成长总不会一蹴而就,从写出程序获取成就感,再到精通框架,快速构造应用,当这些方面都得心应手的时候,可以尝试改造一些框架,或是自己创造一个 。
Gin是一个golang的微框架,封装比较优雅,API友好,源码注释比较明确,已经发布了1.0版本 。具有快速灵活,容错方便等特点 。其实对于golang而言,web框架的依赖要远比Python , Java之类的要小 。自身的net/http足够简单,性能也非常不错 。框架更像是一些常用函数或者工具的集合 。借助框架开发,不仅可以省去很多常用的封装带来的时间,也有助于团队的编码风格和形成规范 。
(1)首先需要安装,安装比较简单,使用go get即可
go getgithub.com/gin-gonic/gin
如果安装失败,直接去Github clone下来,放置到对应的目录即可 。
(2)代码中使用:
下面是一个使用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写个人博客我们可以使用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
【go语言gin写个人博客 go语言】关于go语言gin写个人博客和go语言的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。
推荐阅读
- 直播自动化工具,直播全自动什么意思
- u盘与电脑上的什么连接,u盘怎么与电脑连接
- 网络商城信息系统毕业设计,毕业设计网上商城技术框架有哪些
- phpcms列表分页样式,php pdo分页
- Java代码怎么修bug java代码设置编码格式
- 如何做好淘宝权重优化营销,淘宝做权重是什么意思
- 鸿蒙系统怎么瘦身,鸿蒙系统怎么扩大内存
- ipad上好玩的射击游戏推荐,ipad最好玩的射击游戏
- 怎么安装mysql 电脑怎么安装mysql