GoWeb开发框架gin-基础路由使用

文章目录

  • 1.安装并写一个demo
  • 2.配置GoLang热加载脚手架
  • 3.配合net/http使用完整示例
  • 4.返回值
    • 4.1String返回值
    • 4.2Json返回值
    • 4.3struct结构体返回值
    • 4.4jsonp返回值
    • 4.5XML返回值
  • 5.接收前端传过来的参数
    • 5.1get请求传值
    • 5.2form表单传值
    • 5.3接收结构体
    • 5.4路由地址传参
  • 6.完整代码

1.安装并写一个demo

https://gin-gonic.com/zh-cn/docs/quickstart/
跟着官网上边一步一步的安装,在这里我遇上了go proxy的问题可以参考我之前写的
https://blog.csdn.net/zhaohan___/article/details/134272057?spm=1001.2014.3001.5501
对照一下改一下环境变量修改proxy

完成之后的的代码
在这里插入图片描述

package main

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

func main() {
    r := gin.Default()
    r.GET("/ping", func(c *gin.Context) {
       c.JSON(200, gin.H{
          "message": "pong",
       })
    })
    r.Run() // 默认监听并在 0.0.0.0:8080 上启动服务
}

界面get请求如下图
在这里插入图片描述

2.配置GoLang热加载脚手架

官方地址:https://github.com/gravityblast/fresh

go get github.com/pilu/fresh

然后在这里需要配一下环境变量GoPath下载下来的包的环境变量,直接添加到系统的Path里
在这里插入图片描述
然后在cmd切换到你的工作目录执行

fresh

出现如下界面就算成功了
在这里插入图片描述

3.配合net/http使用完整示例

package main

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

func main() {
    // 创建一个默认的路由引擎
    r := gin.Default()
    // 配置路由
    r.GET("/ping", func(c *gin.Context) {
       // 路由被请求时的返回结果
       c.JSON(http.StatusOK, gin.H{
          "message": "pong",
       })
    })
    r.Run(":10000") // 监听并在 0.0.0.0:10000 上启动服务
}

4.返回值

4.1String返回值

r.GET("/string", func(c *gin.Context) {
    // String数据返回两个参数第一个是状态码,第二个是格式化后的值,第三个是返回值。注意%V占位符是指将后边的values拼接到前边的占位符位置
    c.String(http.StatusOK, "值:%v", "调用一次500元!")
})

4.2Json返回值

r.GET("/json", func(c *gin.Context) {
    // Json数据返回两个参数第一个是状态码,第二个是返回值,这里自动会装配成json返回
    c.JSON(http.StatusOK, gin.H{
       "success": true,
       "message": "json",
    })
})

4.3struct结构体返回值

r.GET("/struct", func(c *gin.Context) {
    // Json数据返回两个参数第一个是状态码,第二个是返回值,本次返回结构体,这里自动会装配成json返回
    returnData := &User{
       Name: "chrise warner",
       Age:  18,
    }
    c.JSON(http.StatusOK, returnData)
})

4.4jsonp返回值

通常适用于前端跨域请求,需要执行前端回调函数

r.GET("/jsonp", func(c *gin.Context) {
    // Json数据返回两个参数第一个是状态码,第二个是返回值,本次返回结构体,这里自动会装配成json返回
    returnData := &User{
       Name: "chrise warner",
       Age:  18,
    }
    c.JSONP(http.StatusOK, returnData)
})

4.5XML返回值

r.GET("/xml", func(c *gin.Context) {
    // Json数据返回两个参数第一个是状态码,第二个是返回值,本次返回结构体,这里自动会装配成json返回
    returnData := &User{
       Name: "chrise warner",
       Age:  18,
    }
    c.XML(http.StatusOK, returnData)
})

5.接收前端传过来的参数

5.1get请求传值

r.GET("/string", func(c *gin.Context) {
    // 接受请求参数
    userName := c.Query("userName")
    age := c.Query("age")
    limit := c.DefaultQuery("limit", "1")
    fmt.Println("后端接收参数" + userName)
    fmt.Println("后端接收参数" + age)
    fmt.Println("后端接收参数" + limit)
    // String数据返回两个参数第一个是状态码,第二个是格式化后的值,第三个是返回值。注意%V占位符是指将后边的values拼接到前边的占位符位置
    c.String(http.StatusOK, "值:%v", "调用一次500元!")
})

5.2form表单传值

// 从form表单中获取值
r.POST("/form", func(c *gin.Context) {
    // 获取form表单中的数据
    userName := c.PostForm("userName")
    age := c.PostForm("age")
    limit := c.DefaultPostForm("limit", "1")
    c.JSON(http.StatusOK, gin.H{
       "userName": userName,
       "age":      age,
       "limit":    limit,
    })
})

5.3接收结构体

首先需要对结构体增加配置,指明自动注入并且修改注入时名称

type User struct {
    Name string `json:"name" binding:"required"` // 后边是json格式化时使用的名
    Age  int    `json:"age" binding:"required"`
}

然后编写结构体接收

// 用结构体接收数据
r.POST("/struct/auto", func(c *gin.Context) {
    // 获取form表单中的数据
    var user User
    if err := c.ShouldBindJSON(&user); err == nil {
       fmt.Println("后端接收参数" + "!" + user.Name)
       c.JSON(http.StatusOK, user)
    } else {
       c.JSON(http.StatusOK, gin.H{
          "err": err.Error(),
       })
    }
})

5.4路由地址传参

// 路由地址传参
r.POST("/struct/auto/:name", func(c *gin.Context) {
    // 获取form表单中的数据
    name := c.Param("name")
    c.JSON(http.StatusOK, gin.H{
       "success": true,
       "message": name,
    })
})

6.完整代码

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
    "net/http"
)

type User struct {
    Name string `json:"name" binding:"required"` // 后边是json格式化时使用的名
    Age  int    `json:"age" binding:"required"`
}

func main() {
    // 创建一个默认的路由引擎,并且定义路由被请求时的返回结果
    r := gin.Default()
    // string返回值
    r.GET("/string", func(c *gin.Context) {
       // 接受请求参数
       userName := c.Query("userName")
       age := c.Query("age")
       limit := c.DefaultQuery("limit", "1")
       fmt.Println("后端接收参数" + userName)
       fmt.Println("后端接收参数" + age)
       fmt.Println("后端接收参数" + limit)
       // String数据返回两个参数第一个是状态码,第二个是格式化后的值,第三个是返回值。注意%V占位符是指将后边的values拼接到前边的占位符位置
       c.String(http.StatusOK, "值:%v", "调用一次500元!")
    })
    // json返回值
    r.GET("/json", func(c *gin.Context) {
       // Json数据返回两个参数第一个是状态码,第二个是返回值,这里自动会装配成json返回
       c.JSON(http.StatusOK, gin.H{
          "success": true,
          "message": "json",
       })
    })
    // struct返回值
    r.GET("/struct", func(c *gin.Context) {
       // Json数据返回两个参数第一个是状态码,第二个是返回值,本次返回结构体,这里自动会装配成json返回
       returnData := &User{
          Name: "chrise warner",
          Age:  18,
       }
       c.JSON(http.StatusOK, returnData)
    })
    // JSONP返回值
    r.GET("/jsonp", func(c *gin.Context) {
       // Json数据返回两个参数第一个是状态码,第二个是返回值,本次返回结构体,这里自动会装配成json返回
       returnData := &User{
          Name: "chrise warner",
          Age:  18,
       }
       c.JSONP(http.StatusOK, returnData)
    })
    // XML返回值
    r.GET("/xml", func(c *gin.Context) {
       // Json数据返回两个参数第一个是状态码,第二个是返回值,本次返回结构体,这里自动会装配成json返回
       returnData := &User{
          Name: "chrise warner",
          Age:  18,
       }
       c.XML(http.StatusOK, returnData)
    })
    // 从form表单中获取值
    r.POST("/form", func(c *gin.Context) {
       // 获取form表单中的数据
       userName := c.PostForm("userName")
       age := c.PostForm("age")
       limit := c.DefaultPostForm("limit", "1")
       c.JSON(http.StatusOK, gin.H{
          "userName": userName,
          "age":      age,
          "limit": 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/235175.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

00.仿简道云公式实战-学前须知

简道云介绍:简道云作为一款个性化应用搭建工具,支持用户在线无编程、免费搭建管理应用,如进销存系统,OA系统等常见应用,公式可以帮助用户提高填写表单的效率,将一些数据自动计算出来。了解简道云公式的小伙…

flstudio21.3.2304高级版水果编曲音乐软件

flstudio高级版是一款适用于广泛领域的音频编辑软件。它支持多通道混音器和VST插件,包括数百种乐器和效果插件。它还为您提供了一个乐谱编辑器,需要对不同乐器的节奏进行必要的编辑。Flstudio具有许多内置电子合成声音,可提供更广泛的电子声音…

代码随想录二刷 |二叉树 | 二叉树的右视图

代码随想录二刷 |二叉树 | 二叉树的右视图 题目描述解题思路代码实现 题目描述 199.二叉树的右视图 给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。 示例…

推荐4个优秀的 Python 时间序列分析库

时间序列分析在金融和医疗保健等领域至关重要,在这些领域,理解随时间变化的数据模式至关重要。在本文中,我们将介绍四个主要的Python库——statmodels、tslearn、tssearch和tsfresh——每个库都针对时间序列分析的不同方面进行了定制。这些库…

【unity实战】一个通用的FPS枪支不同武器射击控制脚本

文章目录 前言模型素材文章用到的粒子火光特效射击效果换弹瞄准开枪抖动效果设置显示文本最终代码不同武器射击效果1. 手枪2. 机枪3. 狙击枪4. 霰弹枪5. 加特林 其他感谢完结 前言 实现FPS枪支不同武器效果,比如手枪,喷子,狙击枪&#xff0c…

Redis生产实战-Redis集群故障探测以及降级方案设计

Redis 集群故障探测 在生产环境中,如果 Redis 集群崩溃了,那么会导致大量的请求打到数据库中,会导致整个系统都崩溃,所以系统需要可以识别缓存故障,限流保护数据库,并且启动接口的降级机制 降级方案设计 …

贪心算法及相关题目

贪心算法概念 贪心算法是指,在对问题求解时,总是做出在当前看来是最好的选择。也就是说,不从整体最优上加以考虑,算法得到的是在某种意义上的局部最优解 。 贪心算法性质(判断是否可以使用贪心算法) 1、贪…

【力扣周赛】第 372 场周赛( ⭐查询 离线做法)TODO

文章目录 竞赛链接Q1:2937. 使三个字符串相等竞赛时代码——检查三个字符串的最长公共前缀子串 Q2:2938. 区分黑球与白球竞赛时代码 Q3:2939. 最大异或乘积竞赛时代码——位运算解法2—— O ( 1 ) O(1) O(1)做法👍(大量…

php中json_encode编码json中出现HTML代码导致无法正常输出的解决办法

$options JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT; $data array(key > <p>test</p>);echo json_encode($data, $options);JSON_HEX_TAG, JSON_HEX_AMP, JSON_HEX_APOS, 和 JSON_HEX_QUOT 是 PHP 中 json_encode() 函数的常量选项&#…

Pytorch-CNN轴承故障一维信号分类(二)

目录 前言 1 数据集制作与加载 1.1 导入数据 1.2 数据加载&#xff0c;训练数据、测试数据分组&#xff0c;数据分batch 2 CNN-2D分类模型和训练、评估 2.1 定义CNN-2d分类模型 2.2 定义模型参数 2.3 模型结构 2.4 模型训练 2.5 模型评估 3 CNN-1D分类模型和训练、评…

【密码学基础】Diffie-Hellman密钥交换协议

DH介绍 Diffie-Hellman密钥协议算法是一种确保共享密钥安全穿越不安全网络的方法。 这个机制的巧妙在于需要安全通信的双方可以用这个方法确定对称密钥&#xff0c;然后可以用这个密钥进行加密和解密。 但是注意&#xff0c;这个密钥交换协议 只能用于密钥的交换&#xff0c;而…

java应用打包运行的4种方法

文章目录 1、方法一&#xff1a;打成jar部署运行2、方法二&#xff1a;通过自制启动器的方式运行3、方法三&#xff1a;使用jpackage把java和jdk一起打包4、方法四&#xff1a;使用GraalVM编译为原生应用4.1、使用native-image-agent(Graalvm内工具)工具来收集这些运行库信息4.…

软件无线电SDR-频谱采集python实现

sdr做的频谱采集&#xff0c;保存的500张频谱图&#xff0c;能看出来是什么东西吗&#xff1f;

成都工业学院Web技术基础(WEB)实验四:CSS3布局应用

写在前面 1、基于2022级计算机大类实验指导书 2、代码仅提供参考&#xff0c;前端变化比较大&#xff0c;按照要求&#xff0c;只能做到像&#xff0c;不能做到一模一样 3、图片和文字仅为示例&#xff0c;需要自行替换 4、如果代码不满足你的要求&#xff0c;请寻求其他的…

perl使用Archive::Tar模块进行文件打包

使用perl的Archive::Tar 模块打包文件夹中的指定文件&#xff0c;输出格式 .tar.gz 。下面是perl代码&#xff1a; #! /usr/bin/perl use v5.14; use File::Find; use Archive::Tar;my filesArry (); my $callback sub {push filesArry, $File::Find::name if -f; };find($c…

【Hive】启动beeline连接hive报错解决

1、解决报错2、在datagrip上连接hive 1、解决报错 刚开始一直报错&#xff1a;启动不起来 hive-site.xml需要配置hiveserver2相关的 在hive-site.xml文件中添加如下配置信息 <!-- 指定hiveserver2连接的host --> <property><name>hive.server2.thrift.bin…

如何打印富文本控件中的内容?

出于某种原因&#xff0c;人们确实对打印富文本控件中的内容感到困惑。 我并非打印方面的专家&#xff0c;但是经过对资料的研究的&#xff0c;我也算弄明白了&#xff0c;今天在此记录一下。 解决问题的关键是这个消息&#xff1a;EM_FORMATRANGE。 每次发送这个消息的时候&a…

Vue 3项目的目录结构

使用vite创建完VUE项目后&#xff0c;使用VS Code编辑器打开项目目录&#xff0c;可以看到一个默认生成的项目目录结构 下图是目录结构&#xff1a; 详细介绍.vscode&#xff1a;存放VS Code编辑器的相关配置。 node_modules&#xff1a;存放项目的各种依赖和安装的插件。…

C# WPF上位机开发(通讯协议的编写)

【 声明&#xff1a;版权所有&#xff0c;欢迎转载&#xff0c;请勿用于商业用途。 联系信箱&#xff1a;feixiaoxing 163.com】 作为上位机&#xff0c;它很重要的一个部分就是需要和外面的设备进行数据沟通的。很多时候&#xff0c;也就是在这个沟通的过程当中&#xff0c;上…