google,google play
文章目录去网(一)杜松子酒框架简介你好世界杜松子酒基础1.路由答。路由乙。路由组丙.路由拆分和注册2.请求参数获取。全球资源定位器(Uniform Resource Locator)参数乙。宁静参数帖子答.表单参数乙。车身参数去网(一)杜松子酒框架简介杜松子酒是一个开发的微框架,封装比较优雅,API友好,源码注释比较明确,具有快速灵活,容错方便等特点
安装:
去找github.com/gin-gonic/gin吧我在安装过程中,有以下的包没有成功安装,采用了手动下载然后放到工作目录下
hello world/**
*杜松子酒版本你好世界
*/
func GinHelloWorld() {
r :=琴酒。默认()
//杜松子酒。语境,封装了请求和反应
r.GET(/hello_gin ,func(context *gin .上下文){
语境。字符串(http ."你好,世界")
})
r.运行(:8080 )
}访问localhost:8080/hello_gin
杜松子酒基础1.路由a.路由//路由
func GinRoute() {
//默认路由器
r :=琴酒。默认()
//获取请求
r.GET(/get ,func(context *gin .上下文){
//路由处理函数
})
//发布请求
r.POST(/post ,func(context *gin .上下文){
})
//上传请求
r.PUT(/put ,func(context *gin .上下文){
})
//删除请求
r.DELETE(delete ,func(context *gin .上下文){
})
}b .路由组路线组是为了管理一些相同的URL,就是相当于在控制器类上加上@RequestMapping(),相当于全球资源定位器(统一资源定位器)的公共前缀
//路由组
v1 :=r.Group(/v1 )
v1 .GET(/vv1 ,func(context *gin .上下文){
//url: /v1/vv1
语境。字符串(200,“vv1”)
})
v2 :=r.Group(/v2 )
v2 .GET(/vv2 ,func(context *gin .上下文){
//url: /v2/vv2
语境。字符串(200,“vv2”)
})
c.路由拆分和注册上面那种只能应用于简单的项目或者演示中
当项目的规模增大后就不太适合继续在项目的main.go文件中去实现路由注册相关逻辑了,我们会倾向于把路由部分的代码都拆分出来,形成一个单独的文件或包:
-服务
-控制器
-经手人
-路线
-
在路线包中可以分类管理路由:
bookRoute.go
func BookRoute(r *gin .引擎){
//注册书相关路由
r.GET(/getBook ),句柄MyGetBookhandler)
r.POST(/addBook),句柄AddBookHandler)
}用户路线。去
func UserRoute(r *gin .引擎){
r.帖子(/用户),句柄AddUser)
}统一注册:
//路由注册函数
func SetupRouter() *gin .引擎{
r :=琴酒。默认()
//将子路由模块设置
图书路线(r)
用户路线(r)
返回r
}处理器函数分别调用服务层:
func AddUser(r *gin .上下文){
//调用服务
}在主要的函数中:
func main() {
r :=路线SetupRouter()
if err:=r . Run(:8080 );呃!=零{
fmt .Println(启动服务失败,错误:%v\n ,错误)
}
}参考:
路由拆分和注册2.请求参数Geta.url参数全球资源定位器(统一资源定位器)参数即得到请求中的请求参数,即全球资源定位器(统一资源定位器)后明文拼接的参数,可以通过查询()和默认查询()获取
查询()相当于学习笔记一中的注解@RequestParam(),若不存在则返回空字符串默认查询()在在询问获取不到相应字段时//url参数
r.GET(/getUrlParams ,func(context *gin .上下文){
名称:=上下文。查询(名称)
年龄:=语境。查询("年龄")
defaultParam :=上下文DefaultQuery(testDefault , testtest )
语境JSON(http .StatusOK,map[string]接口{}{
姓名:姓名,
年龄:年龄,
“default value”:default param
})
})
乙。宁静参数//api参数
r.GET(/getParams/:name/:age ,func(context *gin .上下文){
//上下文封装了请求和响应
名称:=上下文Param(name )
年龄:=语境 Param(年龄)
fmt .名称
fmt .打印时间(年龄)
//返回数据
语境JSONP(http .状态、姓名、年龄)
})
波斯塔。表单参数!声明文档类型
html lang=en
头
meta charset=UTF-8
meta name= viewport content= width=device-width,initial-scale=1.0
meta http-equiv= X-UA-Compatible content= ie=edge
标题文档/标题
/头
身体
form action= http://localhost:8080/form method= post action= application/x-www-form-urlencoded
用户名:输入类型= text name= username placeholder=请输入你的用户名英国铁路公司
密码:输入类型=密码名称=用户密码占位符=请输入你的密码英国铁路公司
输入类型=提交值=提交
/表单
/body
/html //表单参数
r.POST(/form ,func(context *gin .上下文){
//获取表单参数
用户名:=上下文。后置格式("用户名")
密码:=上下文。后置格式("密码")
语境JSON(http .StatusOK,map[string]接口{}{
用户名:用户名,
密码:密码,
})
})
乙。车身参数接收请求体的身体,将身体转为数据后处理也是现在前后端分离的交互方式
定义接收数据结构:标签中数据是你身体中如果使用数据的话,就是键
//定义接收数据的数据结构即身体
类型请求体结构{
//绑定:"必需"修饰的字段,若接收为空值,则报错,是必须字段
用户名字符串形式:用户名json:用户名xml:用户名绑定:必需
“password int”格式:“password”JSON:“password”XML:“password”绑定:“required”
}处理程序函数:
//接收并解析请求中的身体参数
r.POST(/post ,func(context *gin .上下文){
可变主体请求主体
如果错误:=上下文ShouldBindJSON(body);呃!=零{
日志。致命(解析身体错误:,错误)
//杜松子酒H。封装了生成数据数据的工具
语境JSON(http .状态请求,杜松子酒H{error:err})
}
//解析正确
语境JSON(http .杜松子酒H{body:body})
})
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。