GIN的路由以及传参问题

 更新时间:2022年06月14日 10:34:01   作者:杯面Herzog  
本文主要介绍了GIN的路由以及传参问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1.路由:

func main() {
    r := gin.Default()
    r.GET("/ping/:name", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": c.Param("name"),
        })
        fmt.Println(c.Param("name"))
    })
    r.Run() // listen and serve on 0.0.0.0:8080
 
}

以冒号的形式设置url参数的话可以通过,对应的参数可以通过context.Param的形式获得。但是存在问题 无法导向/ping本身

func main() {
    r := gin.Default()
    r.GET("/ping/*name", func(c *gin.Context) {
        c.JSON(200, gin.H{
            "message": c.Param("name"),
        })
        fmt.Println(c.Param("name"))
    })
    r.Run() // listen and serve on 0.0.0.0:8080
 
}

这里就存在另一种参数形式,也就是*,每次获得的参数都将包含/,也可以作用于/ping,如果当前的路由中不存在/ping的处理形式,将会自动跳转到/ping/并交给/ping/*name处理

并且/ping/*name与/ping/:name存在冲突,不能同时写入路由。

2.传参

func main() {
    r := gin.Default()
 
    r.GET("/ping", func(c *gin.Context) {
        c.JSON(200, gin.H{
            ":message": c.Query("name"),
        })
 
    })
 
    r.Run() // listen and serve on 0.0.0.0:8080
 
}

当get传参的时候(url上显示的参数)

可以通过Context.Query来获得对应的value,如果需要判断是否为空,则可以使用Context.getQuery更加优雅,也可以使用Context.DefaultQuery类似于java中map的getOrDefault

当POST传参的时候(请求写入body)

可以通过Context.PostForm来获得对应的value,如果需要判断是否为空,则可以使用Context.getPostForm更加优雅,也可以使用Context.DefaultPostForm类似于java中map的getOrDefault。

但是测试的时候发现,似乎这个方法不像SpringMVC中的RequestBody可以获取对应的JSON,这里的操作会有些复杂,需要通过流,读取Body,并且转换成JSON,通过map读取对应的参数

var user map[string]interface{}
body, _ := ioutil.ReadAll(req.Body)
json.Unmarshal(body, &user)
fmt.Println("获取json中的username:", user["username"])
fmt.Println("获取json中的password:", user["password"].(string)) //转字符串通过len(password)!=0判断长度

以上时大致方法,这里先提出一个疑问,看看后面的学习中是否能解决,不能直接通过中间件实现一个读取转化,从SpringMVC来看 这不是一个很难的轮子。

到此这篇关于GIN的路由以及传参问题的文章就介绍到这了,更多相关GIN路由及传参内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Golang接口型函数使用小结

    Golang接口型函数使用小结

    接口函数指的是用函数实现接口,这样在调用的时候就会非常简便,这种方式适用于只有一个函数的接口,这里以迭代一个map为例,演示这一实现的技巧,对Golang接口型函数使用知识感兴趣的朋友一起看看吧
    2022-06-06
  • golang微服务框架kratos实现Socket.IO服务的方法

    golang微服务框架kratos实现Socket.IO服务的方法

    本文主要介绍了golang微服务框架kratos实现Socket.IO服务的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • GoFrame框架数据校验之校验结果Error接口对象

    GoFrame框架数据校验之校验结果Error接口对象

    这篇文章主要为大家介绍了GoFrame框架数据校验之校验结果Error接口对象示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-06-06
  • Go语言fmt.Sprintf格式化输出的语法与实例

    Go语言fmt.Sprintf格式化输出的语法与实例

    Go 可以使用 fmt.Sprintf 来格式化字符串,下面这篇文章主要给大家介绍了关于Go语言fmt.Sprintf格式化输出的语法与实例,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • 深入探究Go语言从反射到元编程的实践与探讨

    深入探究Go语言从反射到元编程的实践与探讨

    反射和元编程是一些高级编程概念,它们使开发者能够在运行时检查、修改并控制程序的行为,了解反射和元编程的工作方式可以帮助我们更好地理解Go,以及如何在需要的时候高效地使用它们,文章中介绍的非常详细,感兴趣的同学可以参考下
    2023-05-05
  • Go语言递归函数的具体实现

    Go语言递归函数的具体实现

    本文主要介绍了Go语言递归函数的具体实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-04-04
  • Go语言中的Array、Slice、Map和Set使用详解

    Go语言中的Array、Slice、Map和Set使用详解

    这篇文章主要介绍了Go语言中的Array、Slice、Map和Set使用详解,本文给出了它们的创建、使用、多维等代码实例,需要的朋友可以参考下
    2014-10-10
  • Go语言kube-scheduler深度剖析开发之scheduler初始化

    Go语言kube-scheduler深度剖析开发之scheduler初始化

    这篇文章主要介绍了Go语言kube-scheduler深度剖析开发之scheduler初始化实现过程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-04-04
  • Go1.20 arena新特性示例详解

    Go1.20 arena新特性示例详解

    这篇文章主要为大家介绍了Go1.20 arena新特性示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-11-11
  • golang配置管理神器Viper使用教程

    golang配置管理神器Viper使用教程

    这篇文章主要为大家介绍了golang配置管理神器Viper使用教程,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04

最新评论