• golang gin框架1——简单案例以及api版本控制


    gin框架

    gin是golang的一个后台WEB框架

    简单案例

    package main
    
    
    import (
    	"github.com/gin-gonic/gin"
    	"net/http"
    )
    
    func main() {
    	r := gin.Default()
    
    	r.GET("/ping", func(c *gin.Context) {
            //以json形式输出,还可以xml protobuf
    		c.JSON(http.StatusOK, gin.H{
    			"message": "pong",
    		})
    	})
    
    	r.Run()  // listen and serve on 0.0.0.0:8080
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20

    上面代码是gin github 上的一个简单案例,Gin-Context 实现了对request和response的封装,是Gin的核心实现之一,学习使用gin框架就是学习使用Context包的过程。其内部封装了request 和response 过程中的数据

    在这里插入图片描述

    API以及版本控制

    gin可以通过api分组的形式控制API版本

    先看下面两组api

    user.go

    package user
    
    import (
    	"github.com/gin-gonic/gin"
    	"net/http"
    )
    
    func Add(c *gin.Context) {
    	// 都是gin.context作为入参
    	c.JSON(http.StatusOK, gin.H{
    		"method": c.Request.Method,
    		"path": c.Request.URL.Path,
    	})
    }
    
    func Get(c *gin.Context) {
    	// 都是gin.context作为入参
    	c.JSON(http.StatusOK, gin.H{
    		"method": c.Request.Method,
    		"path": c.Request.URL.Path,
    	})
    }
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    user_v2.go

    package user
    
    import (
    	"github.com/gin-gonic/gin"
    	"net/http"
    )
    
    func AddV2(c *gin.Context) {
    	// 都是gin.context作为入参
    	c.JSON(http.StatusOK, gin.H{
    		"method": c.Request.Method,
    		"path": c.Request.URL.Path,
    	})
    }
    
    func GetV2(c *gin.Context) {
    	// 都是gin.context作为入参
    	c.JSON(http.StatusOK, gin.H{
    		"method": c.Request.Method,
    		"path": c.Request.URL.Path,
    	})
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23

    路由初始化

    package routers
    
    import (
    	"github.com/gin-gonic/gin"
    	"goGin/user"
    )
    func InitRouters(r *gin.Engine) {
    	//使用路由分组
    	api := r.Group("api")
    	initUser(api)
    }
    func initUser(group *gin.RouterGroup) {
    	// 路由分组
    	v1 := group.Group("/v1")
    	{
    		// /api/v1/course
    		// 路径携带参数
    		v1.GET("/user/:id", user.Get)
    		v1.POST("/user/:id", user.Add)
    	}
    
    	// v2版本
    	v2 := group.Group("v2")
    	{
    		v2.GET("/user/:id", user.GetV2)
    		v2.POST("/user/:id", user.AddV2)
    	}
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    package main
    
    
    import (
    	"github.com/gin-gonic/gin"
    	"goGin/routers"
    )
    
    func main() {
    	r := gin.Default()
    	routers.InitRouters(r)
    	r.Run(":8080")  // listen and serve on 0.0.0.0:8080
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    测试
    在这里插入图片描述

  • 相关阅读:
    基于陷门置换的语义安全的公钥加密方案构造
    音乐管理系统
    【从0入门JVM】-01Java代码怎么运行的
    rstudio server 服务器卡死了怎么办
    DM8:win10安装达梦数据库8版本
    android glide实现高斯模糊,毛玻璃效果,加载图片
    Xss跨站脚本攻击
    linux系统使用达梦数据库
    代码随想录动态规划——编辑距离
    上周热点回顾(4.15-4.21)
  • 原文地址:https://blog.csdn.net/qq_43058348/article/details/133607353