代刷网站推广,外贸购物网站建站,wordpress 搜索mysql,做网站的是怎么赚钱的目录 一#xff1a;经典入门案例二#xff1a;请求参数2.1: API参数2.2: URL参数2.3: 表单参数 三#xff1a; 响应参数四#xff1a;数据解析和绑定4.1: JSON数据解析绑定4.2: FROM表单数据解析和绑定 五#xff1a; 路由组六#xff1a;异步处理七#xff1a;中间件7.… 目录 一经典入门案例二请求参数2.1: API参数2.2: URL参数2.3: 表单参数 三 响应参数四数据解析和绑定4.1: JSON数据解析绑定4.2: FROM表单数据解析和绑定 五 路由组六异步处理七中间件7.1: 全局中间件7.2: 局部中间件 一经典入门案例
代码package mainimport (github.com/gin-gonic/ginnet/http
)func main() {// 1实例化默认路由r : gin.Default()// 2: 编写路由处理函数r.GET(/hello, func(context *gin.Context) {context.String(http.StatusOK, hello world!!!)})// 3: 路由监听端口r.Run(:8080)
}请求
二请求参数
2.1: API参数
API参数 参数写在路径中。注意 1: 一般用冒号 路径参数名称来划分。 冒号的作用是可以让Param方法取到后面的数据。2: 如果是用星号 路径名称则获取到的是包含路径斜杠后续的所有内容的。 案例一 package mainimport (github.com/gin-gonic/ginnet/http)func main() {// 1实例化默认路由r : gin.Default()// 2: 编写路由处理函数r.GET(/user/:name/:action, func(context *gin.Context) {name : context.Param(name)action : context.Param(action)context.String(http.StatusOK, name is name, action is action。)})// 3: 路由监听端口r.Run(:8080)}
- 结果 发送请求http://127.0.0.1:8080/user/renshanwen/reading案例二package mainimport (github.com/gin-gonic/ginnet/http
)func main() {// 1实例化默认路由r : gin.Default()// 2: 编写路由处理函数r.GET(/user/*name_action, func(context *gin.Context) {nameAction : context.Param(name_action)context.String(http.StatusOK, name_action is nameAction)})// 3: 路由监听端口r.Run(:8080)
}2.2: URL参数
URL参数参数写在请求k-v对中。使用Query()函数获取参数信息 获取不到默认获取到空字符串。案例package mainimport (github.com/gin-gonic/ginnet/http
)func main() {// 1实例化默认路由r : gin.Default()// 2: 编写路由处理函数r.GET(/user, func(context *gin.Context) {name : context.Query(name)age : context.Query(age)context.String(http.StatusOK, name is name age is age.)})// 3: 路由监听端口r.Run(:8080)
}2.3: 表单参数
POST请求中的信息 一般是JSON数据。使用PostForm函数在表单中获取数据。案例package mainimport (github.com/gin-gonic/ginnet/http
)func main() {// 1实例化默认路由r : gin.Default()// 2: 编写路由处理函数r.POST(/user, func(context *gin.Context) {name : context.PostForm(name)age : context.PostForm(age)context.String(http.StatusOK, name is name age is age.)})// 3: 路由监听端口r.Run(:8080)
} 解析JSON数据案例package mainimport (github.com/gin-gonic/ginnet/httpstrconv
)func main() {// 1实例化默认路由r : gin.Default()// 定义一个User结构体type User struct {Name string json:nameAge int64 json:age}// 2: 编写路由处理函数r.POST(/user, func(context *gin.Context) {// 实例化UserreqData : User{}// 将内容绑定到字典中context.BindJSON(reqData)// 构造响应context.String(http.StatusOK, name is reqData.Name age is strconv.FormatInt(reqData.Age, 10).)})// 3: 路由监听端口r.Run(:8080)
}结果
三 响应参数
Gin支持多种响应格式 例如json、结构体、XML、YAML类似于java的properties、ProtoBuf。最常用的就是json。案例package mainimport (github.com/gin-gonic/ginnet/http
)func main() {// 1实例化默认路由r : gin.Default()// 定义一个User结构体type User struct {Name string json:nameAge int64 json:age}// 2: 编写路由处理函数r.POST(/user, func(context *gin.Context) {// 实例化UserreqData : User{}// 将内容绑定到字典中context.BindJSON(reqData)respData : gin.H{name: renshanwen,age: 25,}// 构造响应context.JSON(http.StatusOK, respData)})// 3: 路由监听端口r.Run(:8080)
}结果
四数据解析和绑定
4.1: JSON数据解析绑定
案例
package mainimport (github.com/gin-gonic/ginnet/http
)func main() {// 1实例化默认路由r : gin.Default()// 定义一个User结构体type User struct {// 名称 类型 被解析的类型:参数名称 binding:required表示必须绑定(请求中必须携带)Name string json:name binding:requiredAge int64 json:age}// 2: 编写路由处理函数r.POST(/user, func(context *gin.Context) {// 实例化UserreqData : User{}// 将内容绑定到字典中if err : context.BindJSON(reqData); err nil {respData : gin.H{name: renshanwen,age: 25,}// 构造响应context.JSON(http.StatusOK, respData)} else {context.JSON(http.StatusBadRequest, gin.H{error: err.Error()})}})// 3: 路由监听端口r.Run(:8080)
}缺失name测试 缺失age测试
4.2: FROM表单数据解析和绑定
表单只需要调整一下使用的方法Bind和定义的类型formpackage mainimport (github.com/gin-gonic/ginnet/http
)func main() {// 1实例化默认路由r : gin.Default()// 定义一个User结构体type User struct {// 名称 类型 被解析的类型:参数名称 binding:required表示必须绑定(请求中必须携带)Name string form:name binding:requiredAge int64 form:age}// 2: 编写路由处理函数r.POST(/user, func(context *gin.Context) {// 实例化UserreqData : User{}// 将内容绑定到字典中if err : context.Bind(reqData); err nil {respData : gin.H{name: renshanwen,age: 25,}// 构造响应context.JSON(http.StatusOK, respData)} else {context.JSON(http.StatusBadRequest, gin.H{error: err.Error()})}})// 3: 路由监听端口r.Run(:8080)
}测试
五 路由组
作用根据URL前缀可以分组。案例package mainimport (github.com/gin-gonic/ginnet/http
)// 定义一个User结构体
type User struct {// 名称 类型 被解析的类型:参数名称 binding:required表示必须绑定(请求中必须携带)Name string form:name binding:requiredAge int64 form:age
}func main() {// 实例化默认路由r : gin.Default()// 定义一个路由组userRoutes : r.Group(/user){userRoutes.POST(/shan, test)userRoutes.POST(/wen, test)}// 路由监听端口r.Run(:8080)
}func test(context *gin.Context) {// 实例化UserreqData : User{}// 将内容绑定到字典中if err : context.Bind(reqData); err nil {respData : gin.H{name: renshanwen,age: 25,}// 构造响应context.JSON(http.StatusOK, respData)} else {context.JSON(http.StatusBadRequest, gin.H{error: err.Error()})}
}测试
六异步处理
需求某些处理 我们可以放在后台去做 接口要求立刻返回数据。 则可以使用异步处理的方式。案例package mainimport (fmtgithub.com/gin-gonic/ginnet/httptime
)// 定义一个User结构体
type User struct {// 名称 类型 被解析的类型:参数名称 binding:required表示必须绑定(请求中必须携带)Name string form:name binding:requiredAge int64 form:age
}func main() {// 实例化默认路由r : gin.Default()// 定义一个路由组userRoutes : r.Group(/user){userRoutes.POST(/action, test)}// 路由监听端口r.Run(:8080)
}func test(context *gin.Context) {// 实例化UserreqData : User{}// 将内容绑定到字典中if err : context.Bind(reqData); err nil {respData : gin.H{name: renshanwen,age: 25,}// 进行异步处理go func() {for i : 0; i 10; i {fmt.Printf(正在处理 %d \n, i)time.Sleep(3 * time.Second)}}()// 构造响应context.JSON(http.StatusOK, respData)} else {context.JSON(http.StatusBadRequest, gin.H{error: err.Error()})}
}结果 先返回了响应 后进行循环处理。
七中间件
7.1: 全局中间件
所有的请求都经过的中间件。例如 所有的请求都经过
7.2: 局部中间件