从零开发区块链应用(六)--gin框架使用

gin框架使用

参考文档:

一、Gin 框架介绍

Gin 是一个用 Go 语言编写的 web 微框架,封装比较优雅,API 友好,具有快速灵活,容错方便等特点。它是一个类似于 martini 但拥有更好性能的 API 框架,由于使用了 httpprouter,速度提高了近 40 倍。如果你是性能和高效的追求者,你会爱上 Gin。

Go 世界里最流行的 Web 框架,Github 上有 46k+star。基于 httprouter 开发的 Web 框架。中文文档齐全,简单易用的轻量级框架。

二、Gin安装

  • 下载并安装 gin:
go get -u github.com/gin-gonic/gin
  • 将 gin 引入到代码中:
import "github.com/gin-gonic/gin"

三、Gin使用

package api

import (
    "github.com/gin-gonic/gin"
)

func RouterStart()  {

    // 创建一个路由引擎
    router := gin.New()

    // 创建一个默认的路由引擎
    router := gin.Default()

    // GET:请求方式;/hello:请求的路径
    // 当客户端以GET方法请求/hello路径时,会执行后面的匿名函数
        // gin.Context封装了Request和Response

    r.GET("/hello", func(c *gin.Context) {
        // c.JSON:返回JSON格式的数据
        c.JSON(200, gin.H{
            "message": "Hello world!",
        })
    })
    // 启动HTTP服务,默认在0.0.0.0:8080启动服务
    r.Run()
}

3.1 设置gin模式

gin.SetMode(gin.ReleaseMode)

查看gin源码,可发现gin框架提供了下列三种模式。

const (
    // DebugMode indicates gin mode is debug.
    DebugMode = "debug"
    // ReleaseMode indicates gin mode is release.
    ReleaseMode = "release"
    // TestMode indicates gin mode is test.
    TestMode = "test"
)

我们每次启动gin框架,如果不设置以下gin模式

gin.SetMode(gin.ReleaseMode)

程序则会输出一段提示

[WARNING] Running in "debug" mode. Switch to "release" mode in production.
 - using env:   export GIN_MODE=release
 - using code:  gin.SetMode(gin.ReleaseMode)

所以,现在我们就可以明白了,这三种mode分别对应了不同的场景。在我们开发调试过程中,使用debug模式就可以了。在上线的时候,一定要选择release模式。而test可以用在测试场景中。

3.2 创建新路由

//创建一个路由引擎
router := gin.New()

// 创建一个默认的路由引擎
router := gin.Default()

gin.Default() 和 gin.New() 的区别在于 gin.Default() 也使用 gin.New() 创建engine实例,但是会默认使用 Logger 和 Recovery 中间件。

  • Logger 是负责进行打印并输出日志的中间件,方便开发者进行程序调试;
  • Recovery 中间件的作用是如果程序执行过程中遇到 panic 中断了服务,则 Recovery 会恢复程序执行,并返回服务器500内部错误。通常情况下,我们使用默认的 gin.Default() 创建 router 实例。

3.3 创建多路由分组

chain := router.Group("/api/admin")

我们把一个模块相关的方法都写在一个路由下。便于管理和查找相关的代码。 Gin框架正好为我们提供了这个方法。

代码举例如下

//v1组路由
v1:=router.Group("/v1")
{
    v1.GET("/login", loginEndpoint)
    v1.GET("/submit", submitEndpoint)
    v1.GET("/read", readEndpoint)
}

//v2组路由
v2:=router.Group("/v2")
{
    v2.GET("/login", loginEndpoint)
    v2.GET("/submit", submitEndpoint)
    v2.GET("/read", readEndpoint)
}

3.4 创建路由

// 新增banner
chain.POST("/banner/add", handler.AddBanner)
  • POST:请求方式;另外例如GET
  • /banner/add:请求的二级路径
  • handler.AddBanner:执行函数

当客户端以POST方法请求.../banner/add 路径时,会执行后面的函数

3.5 编写接口执行函数

func AddBanner(ctx *gin.Context)
  • gin.Context封装了Request和Response

Web服务器收到客户端的http请求,会针对每一次请求,分别创建一个用于代表请求的request对象、和代表响应的response对象。

故:当需要获取客户机提交过来的数据时,找request对象就行了。 当需要向客户机输出数据,找response对象。

3.6 启动服务

router.Run(config.Conf.Console.Port)
  • 启动HTTP服务,从配置文件中获取当前服务启动的端口

默认在0.0.0.0:8080启动服务


本系列文章: 从零开发区块链应用(一)--golang配置文件管理工具viper 从零开发区块链应用(二)--mysql安装及数据库表的安装创建 从零开发区块链应用(三)--mysql初始化及gorm框架使用 从零开发区块链应用(四)--自定义业务错误信息 从零开发区块链应用(五)--golang网络请求 从零开发区块链应用(六)--gin框架使用 从零开发区块链应用(七)--gin框架参数获取 从零开发区块链应用(八)--结构体初识 从零开发区块链应用(九)--区块链结构体创建 从零开发区块链应用(十)--golang协程使用 从零开发区块链应用(十一)--以太坊地址生成 从零开发区块链应用(十二)--以太坊余额查询 从零开发区块链应用(十三)--以太坊区块查询 从零开发区块链应用(十四)--以太坊交易哈希查询 从零开发区块链应用(十五)--以太坊交易匹配查询 从零开发区块链应用(十六)--ETH转账处理


点赞 1
收藏 1
分享
本文参与登链社区写作激励计划 ,好文好收益,欢迎正在阅读的你也加入。

0 条评论

请先 登录 后评论
杰哥的技术杂货铺
杰哥的技术杂货铺
0x6e60...2aa2
六年区块链开发及运维经验,成都电子科技大学Web3讲师,利用该平台进行技术分享,可私信进行交流沟通