Gin的应用

Gin是一个golang的web server微框架,用于搭建一个简单的web server。

Hello World

使用Gin实现Hello world非常简单,创建一个router,然后使用其Run的方法:

import (
    "gopkg.in/gin-gonic/gin.v1"
    "net/http"
)

func main(){

    router := gin.Default()

    router.GET("/", func(c *gin.Context) {
        c.String(http.StatusOK, "Hello World")
    })
    router.Run(":8000")
}

  简单几行代码,就能实现一个web服务。使用gin的Default方法创建一个路由handler。然后通过HTTP方法绑定路由规则和路由函数。不同于net/http库的路由函数,gin进行了封装,把request和response都封装到gin.Context的上下文环境。最后是启动路由的Run方法监听端口。麻雀虽小,五脏俱全。当然,除了GET方法,gin也支持POST,PUT,DELETE,OPTION等常用的restful方法。

应用实例

使用Gin创建一个web server,解析提交数据进行处理,最后再将请求参数返回

type RequestParas struct {
	QueryText   string `json:"query_text"`
	SessionID   string `json:"session_id"`
	AgentToken  string `json:"agent_token"`
}

type RequestBody struct {
	Timestamp uint64       `json:"timestamp" binding:"required"`
	Sign      string       `json:"sign" binding:"required"`
	Data      RequestParas `json:"data" binding:"required"`
} func queryRequestAndReponse(c *gin.Context) { var reqBodyJSON RequestBody //数据解析,将json格式数据解析为结构体 if err := c.ShouldBindJSON(&reqBodyJSON); err == nil {           //数据处理           //返回response c.JSON(http.StatusOK, gin.H{ "data": gin.H{ "query_text": reqBodyJSON.Data.QueryText, "session_id": reqBodyJSON.Data.SessionID, "agent_token":reqBodyJSON.Data.AgentToken, }, }) } else { c.JSON(http.StatusBadRequest, gin.H{"error": err.Error()}) } } func main() { router := gin.Default() router.POST("/v1/query", func(c *gin.Context) { queryRequestAndReponse(c)  //注1 }) router.Run(":8000") }

  使用命令curl -H "Content-Type:application/json" -XPOST 'http://127.0.0.1:8000/v1/query?version=20170407' -d '{"timestamp":1502879948,"sign": "c70d665cc46dba4b71305172a0f826a2","data":{"query_text":"金卡怎么办理","agent_token":"eeb8ca20-c436-4d33-9bf6-e5571f9fbb1c"}}'提供数据

 

注:

1. router.POST()中的func(c *gin.Context) {}已经创建goroutine【框架本身实现的】,因此queryRequestAndReponse(c)不需要再创建goroutine,如果再次创建,返回response可能出错,警告信息:“[GIN-debug] [WARNING] Headers were already written. Wanted to override status code 200 with 400”。

 

转载于:https://www.cnblogs.com/leaves1024/p/8986131.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值