首页 > 其他分享 >Golang Gin 请求参数的获取值 & 路由分组 & 控制器继承

Golang Gin 请求参数的获取值 & 路由分组 & 控制器继承

时间:2023-11-23 12:44:06浏览次数:30  
标签:http Context gin Golang StatusOK func router Gin 路由

一. 请求参数的获取值   动态路由

  1 type User struct {
  2     Username string `form:"username" json:"username"`
  3     Password string `form:"password" json:"password"`
  4     Age      int    `form:"age" json:"age"`
  5 }
  6 
  7 // TestRequestParameter 网页请求携带的参数
  8 func TestRequestParameter() {
  9     router := gin.Default()
 10 
 11     router.SetFuncMap(
 12         template.FuncMap{
 13             "UnixToTime": UnixToTime,
 14             "Println":    Println,
 15         })
 16     router.LoadHTMLGlob("templates/**/*")
 17     router.Static("/static", "./static")
 18 
 19     router.GET("/user", func(c *gin.Context) {
 20         c.HTML(http.StatusOK, "default/user.html", gin.H{})
 21     })
 22 
 23     // 获取get过来的参数
 24     router.GET("/", func(c *gin.Context) {
 25         username := c.Query("username")
 26         age := c.Query("age")
 27         page := c.DefaultQuery("page", "1")
 28 
 29         c.JSON(http.StatusOK, gin.H{
 30             "username": username,
 31             "age":      age,
 32             "page":     page,
 33         })
 34 
 35     })
 36 
 37     // 获取表单post过来的数据
 38     router.POST("/doAddUser", func(c *gin.Context) {
 39         username := c.PostForm("username")
 40         password := c.PostForm("password")
 41         age := c.DefaultPostForm("age", "20")
 42 
 43         c.JSON(http.StatusOK, gin.H{
 44             "username": username,
 45             "password": password,
 46             "age":      age,
 47         })
 48     })
 49 
 50     // 获取Get传递数据绑定到结构体
 51     // http://localhost:8080/getUser?username=root&password=123456
 52     router.GET("/getUser", func(c *gin.Context) {
 53         user := &User{}
 54         if err := c.ShouldBind(user); err == nil {
 55             c.JSON(http.StatusOK, user)
 56         } else {
 57             c.JSON(http.StatusOK, gin.H{
 58                 "err": err.Error(),
 59             })
 60         }
 61     })
 62 
 63     // 获取POST传递数据绑定到结构体
 64     router.POST("/doAddUser2", func(c *gin.Context) {
 65         user := &User{}
 66         if err := c.ShouldBind(user); err == nil {
 67             c.JSON(http.StatusOK, user)
 68         } else {
 69             c.JSON(http.StatusOK, gin.H{
 70                 "err": err.Error(),
 71             })
 72         }
 73     })
 74 
 75     // 获取POST传递xml数据绑定到结构体
 76     type Article struct {
 77         Title   string `xml:"title"`
 78         Content string `xml:"content"`
 79     }
 80     router.POST("/xml", func(c *gin.Context) {
 81         b, _ := c.GetRawData() // 从c.Request,Body读取请求数据
 82 
 83         art := &Article{}
 84         if err := xml.Unmarshal(b, art); err == nil {
 85             c.JSON(http.StatusOK, art)
 86         } else {
 87             c.JSON(http.StatusOK, gin.H{
 88                 "msg": err.Error(),
 89             })
 90         }
 91 
 92     })
 93 
 94     // 动态路由
 95     router.GET("/list/:cid/:eid", func(c *gin.Context) {
 96         // http://localhost:8080/list/80/10
 97         cid := c.Param("cid")
 98         eid := c.Param("cid")
 99 
100         c.String(http.StatusOK, "cid=%v,eid=%v", cid, eid)
101     })
102 
103     router.Run("0.0.0.0:8080")
104 }

 

二. 路由分组

 1 // 路由分组
 2 func TestRouterGroup() {
 3     router := gin.Default()
 4 
 5     router.SetFuncMap(
 6         template.FuncMap{
 7             "UnixToTime": UnixToTime,
 8             "Println":    Println,
 9         })
10     router.LoadHTMLGlob("templates/**/*")
11     router.Static("/static", "./static")
12 
13     defaultRouters := router.Group("/")
14     {
15         // http://localhost:8080/
16         defaultRouters.GET("/", func(c *gin.Context) {
17             c.String(http.StatusOK, "首页")
18         })
19 
20         // http://localhost:8080/news
21         defaultRouters.GET("/news", func(c *gin.Context) {
22             c.String(http.StatusOK, "新闻")
23         })
24     }
25 
26     // 也可以单独列出来,放到独立文件中去
27     routers.AdminRouters(router)
28     routers.ApiRouters(router)
29 
30     router.Run("0.0.0.0:8080")
31 
32 }
func AdminRouters(r *gin.Engine) {
    adminRouters := r.Group("/admin")
    {
        // http://localhost:8080/admin/
        adminRouters.GET("/", func(c *gin.Context) {
            c.String(http.StatusOK, "后台首页")
        })

        // 通过控制器去控制路由更方便,因为控制器可以继承
        // http://localhost:8080/admin/user
        adminRouters.GET("/user", admin.UserControl{}.Index)

        // http://localhost:8080/admin/user/add
        adminRouters.GET("/user/add", admin.UserControl{}.Add)

        // http://localhost:8080/admin/user/edit
        adminRouters.GET("/user/edit", admin.UserControl{}.Edit)

        // http://localhost:8080/admin/article
        adminRouters.GET("/article", admin.ArticleControl{}.Index)
    }
}

 

三. 控制器继承

type BaseControl struct{}

func (b BaseControl) Success(c *gin.Context) {
    c.String(http.StatusOK, "Success")
}

func (b BaseControl) Fail(c *gin.Context) {
    c.String(http.StatusBadRequest, "Fail")
}


type UserControl struct {
    controls.BaseControl
}

func (con UserControl) Index(c *gin.Context) {
    c.String(http.StatusOK, "用户列表-首页")
}

func (con UserControl) Add(c *gin.Context) {
    c.String(http.StatusOK, "添加用户")
}

func (con UserControl) Edit(c *gin.Context) {
    c.String(http.StatusOK, "编辑用户")
}

func (con UserControl) Delete(c *gin.Context) {
    c.String(http.StatusOK, "删除用户")
}

 

标签:http,Context,gin,Golang,StatusOK,func,router,Gin,路由
From: https://www.cnblogs.com/watermeloncode/p/17851310.html

相关文章

  • nginx-下载安装与配置
    nginx下载从官网下载,使用命令在linux下载即可,这个是目前稳定版最新的1.24.0版本,如果想要用旧版本直接修改版本号即可(旧版本我用的是1.12.2)下载需要使用wget命令,默认是没有的#安装wgetyuminstallwget#建议直接下载到合适的地方先切换cd/usr/local#新版wgethtt......
  • 哪些企业是Zoho Bigin的受众?
      ZohoBigin是Zoho公司推出的一款针对小微企业设计的CRM系统,它与ZohoCRM一脉相承,但更加轻量级,快速帮助小微企业实现数字化销售。下面来说说,ZohoBigin是什么?它适合哪些企业?什么是ZohoBigin:ZohoBigin是一款小企业CRM系统,它没有ZohoCRM那么全面的功能,而是专注于客户管理......
  • 使用ensp搭建路由拓扑,并使用BGP协议实现网络互通实操BGP路由协议学习一
    1.使用ENSP搭建的网络拓扑如下:         数据准备:设备名称接口IP地址DeviceALoopback01.1.1.1/32Eth 1/0/0172.16.0.1/16Eth0/0/0192.168.0.1/24DeviceBLoopback02.2.2.2/32Eth 0/0/110.1.1.1/24GE0/0/0192.168.0.2/24Eth 0/0/010.1.3.1/24DeviceCLoopbac......
  • BGP路由协议学习一
    1.BGP的特点:BGP使用TCP作为其传输层协议(端口号为179),使用触发式路由更新,而不是周期性路由更新。BGP能够承载大批量的路由信息,能够支撑大规模网络。BGP提供了丰富的路由策略,能够灵活的进行路由选路,并能指导对等体按策略发布路由。BGP能够支撑MPLS/VPN的应用,传递客户VPN路由。BGP提供......
  • haproxy+nginx实现web负载均衡集群:
    haproxy+nginx实现web负载均衡集群: 主机|系统|IP地址|主要软件|—|—|—|—|—Haproxy服务器|CentOS7.9X86_64|192.168.8.101|haproxy-1.5.19.tar.gzNginx服务器1|CentOS7.9X86_64|192.168.8.200|nginx-1.12.0.tar.gzNginx服务器2|CentOS7.9X86_64|192.168.8.20......
  • gobgp宣告bgp路由
    wgethttps://github.com/osrg/gobgp/releases/download/v3.20.0/gobgp_3.20.0_linux_amd64.tar.gz#c1和c2容器启动gobgpd守护进程#c1#gobgpd.conf[global.config]as=1002router-id="172.17.0.4"[[neighbors]][neighbors.config]peer-as=1002......
  • Nginx loki监控日志的学习
    Nginxloki监控日志的学习背景学习自:https://mp.weixin.qq.com/s/Qt1r7vzWvCcJpNDilWHuxQ增加了一些自己的理解第一部分nginx日志的完善在logformat的后面增加一个:log_formatjson_analyticsescape=json'{''"msec":"$msec",'......
  • 微服务 路由的过滤器配置
        ......
  • 微服务 Gateway 网关——路由断言工厂
    路由断言工厂RoutePredicateFactory我们在配置文件中写的断言规则只是字符串,这些字符串会被 PredicateFactory读取并处理,转变为路由判断的条件  ......
  • golang 内存分配
    golang的内存分配思想从tcmalloc而来,思路是把对象分配成小对象减少锁的力度或无锁增加效率定义golang内部的页(Page)大小为8B空间大小golang内部把要申请或使用的空间大小分为了三大类:微对象(<16B),小对象(16B~32KB),大对象(>32KB),其中小对象又分为67种,定义在src......