详解Go语言中Get/Post请求测试


Posted in Golang onJune 01, 2022

基础语法差不多了,需要开始实践到一下项目,先来web框架gin吧,做一个后端web服务。

在把项目搭建起来的过程中,我也要结合实际的工作经验,补充一些项目结构、开发组件上的理解。

项目地址:github地址

gin安装

先将gin安装一下,安装依赖go语言还是比较方便的。

在安装之前先配置一下goproxy。

命令如下:

go env -w GO111MODULE=on
go env -w GOPROXY=https://mirrors.aliyun.com/goproxy/   //阿里代理
go env -w GOPROXY=https://goproxy.cn   //七牛云代理

安装一下gin,命令如下:

go get github.com/gin-gonic/gin

Get请求测试

实现一个web服务还是比较简单的,创建一个router,绑定路由规则即可。先测试几个Get请求。

样例代码如下:

package main
 
import (
	"github.com/gin-gonic/gin"
	"net/http"
)
 
func main() {
	router := gin.Default()
	router.GET("/", func(context *gin.Context) {
		context.String(http.StatusOK, "hello world")
	})
 
	router.GET("/test/:name", func(context *gin.Context) {
		name := context.Param("name")
		context.String(http.StatusOK, "check param %s", name)
	})
 
	router.GET("/test1", func(context *gin.Context) {
		name := context.DefaultQuery("name", "张三")
		gender := context.Query("gender")
		context.String(http.StatusOK, "他叫%s,性别:%s", name, gender)
	})
 
	router.Run(":8080")
}

执行结果

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

[GIN-debug] GET    /                         --> main.main.func1 (3 handlers)
[GIN-debug] GET    /test/:name               --> main.main.func2 (3 handlers)
[GIN-debug] GET    /test1                    --> main.main.func3 (3 handlers)
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Listening and serving HTTP on :8080

[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend yo
u to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-
proxies for details.
[GIN-debug] Listening and serving HTTP on :8080

测试一下,这里我是用的接口测试工具为ApiPost

详解Go语言中Get/Post请求测试

详解Go语言中Get/Post请求测试

详解Go语言中Get/Post请求测试

注意

1、在使用context.DefaultQuery方法的时候,可以提供一个默认值。

2、除了可以使用":"来获取路径参数外,可以使用"*",可以匹配更多规则。我个人感觉我不会这么用get请求参数。

Post请求测试

Post请求是在项目中使用的比较多的,而且不管是使用form获取参数还是body,都十分常见。

同时返回的数据也不可能使用一行字符串,实际项目中还是使用json格式居多。

所以下面我使用form参数和body参数实现了一下post测试接口。

完成代码如下

package main
 
import (
	"encoding/json"
	"fmt"
	"github.com/gin-gonic/gin"
	"io/ioutil"
	"net/http"
)
 
type Result struct {
	Name string `json:"name"`
	Age  int    `json:"age"`
}
 
//反序列化为结构体对象
func parseJson(a string) Result {
	fmt.Printf("原始字符串: %s\n", a)
	var c Result
	if err := json.Unmarshal([]byte(a), &c); err != nil {
		fmt.Println("Error =", err)
		return c
	}
	return c
}
 
func main() {
	router := gin.Default()
	router.GET("/", func(context *gin.Context) {
		context.String(http.StatusOK, "hello world")
	})
 
	router.GET("/test/:name", func(context *gin.Context) {
		name := context.Param("name")
		context.String(http.StatusOK, "check param %s", name)
	})
 
	router.GET("/test1", func(context *gin.Context) {
		name := context.DefaultQuery("name", "张三")
		gender := context.Query("gender")
		context.String(http.StatusOK, "他叫%s,性别:%s", name, gender)
	})
 
	router.POST("/testPost", func(context *gin.Context) {
		name := context.PostForm("name")
		nick := context.DefaultPostForm("nick", "leo")
		context.JSON(http.StatusOK, gin.H{
			"status": gin.H{
				"code":    http.StatusOK,
				"success": true,
			},
			"name": name,
			"nick": nick,
		})
	})
 
	router.POST("/testPost2", func(context *gin.Context) {
		data, _ := ioutil.ReadAll(context.Request.Body)
		fmt.Println(string(data))
		context.JSON(http.StatusOK, gin.H{
			"code": http.StatusOK,
			"data": parseJson(string(data)),
		})
	})
 
	router.Run(":8080")
}

测试一下testPost和testPost2接口

详解Go语言中Get/Post请求测试

详解Go语言中Get/Post请求测试

注意

1、使用context.DefaultPostForm方法可以提供一个默认值。

2、可以使用gin.H方法构造json结构返回。

3、将获得打参数反序列化为结构体,这部分的代码使用到之前讲json解析的笔记。

到此这篇关于详解Go语言中Get/Post请求测试的文章就介绍到这了,更多相关Go语言 Get Post请求内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!


Tags in this post...

Golang 相关文章推荐
golang正则之命名分组方式
Apr 25 Golang
golang 实现对Map进行键值自定义排序
Apr 28 Golang
golang 生成对应的数据表struct定义操作
Apr 28 Golang
使用Golang的channel交叉打印两个数组的操作
Apr 29 Golang
golang DNS服务器的简单实现操作
Apr 30 Golang
Golang Gob编码(gob包的使用详解)
May 07 Golang
Golang实现AES对称加密的过程详解
May 20 Golang
试了下Golang实现try catch的方法
Jul 01 Golang
Golang流模式之grpc的四种数据流
Apr 13 Golang
Golang jwt身份认证
Apr 20 Golang
Golang 入门 之url 包
May 04 Golang
go goth封装第三方认证库示例详解
Aug 14 Golang
Golang实现可重入锁的示例代码
May 25 #Golang
Go web入门Go pongo2模板引擎
May 20 #Golang
Go语言入门exec的基本使用
May 20 #Golang
Golang并发工具Singleflight
May 06 #Golang
深入理解 Golang 的字符串
May 04 #Golang
Golang入门之计时器
May 04 #Golang
Golang 入门 之url 包
May 04 #Golang
You might like
php文件上传表单摘自drupal的代码
2011/02/15 PHP
9个经典的PHP代码片段分享
2014/12/18 PHP
Laravel配置全局公共函数的方法步骤
2019/05/09 PHP
在laravel中实现事务回滚的方法
2019/10/10 PHP
PHP pthreads v3下同步处理synchronized用法示例
2020/02/21 PHP
JavaScript 在线压缩和格式化收藏
2009/01/16 Javascript
JQuery UI的拖拽功能实现方法小结
2012/03/14 Javascript
通过jQuery源码学习javascript(一)
2012/12/27 Javascript
删除select中所有option选项jquery代码
2013/08/12 Javascript
jQuery实现的手机发送验证码倒计时效果代码分享
2015/08/24 Javascript
关于javascript原型的修改与重写(覆盖)差别详解
2016/08/31 Javascript
JavaScript for循环 if判断语句(学习笔记)
2017/10/11 Javascript
vue.js根据代码运行环境选择baseurl的方法
2018/02/28 Javascript
Nodejs中的JWT和Session的使用
2018/08/21 NodeJs
jquery 动态遍历select 赋值的实例
2018/09/12 jQuery
layui输入框只允许输入中文且判断长度的例子
2019/09/18 Javascript
vue微信分享插件使用方法详解
2020/02/18 Javascript
JS实现联想、自动补齐国家或地区名称的功能
2020/07/07 Javascript
Vue中避免滥用this去读取data中数据
2021/03/02 Vue.js
[09:13]DOTA2-DPC中国联赛 正赛 Ehome vs Magma 选手采访 1月19日
2021/03/11 DOTA
python字典排序实例详解
2015/05/20 Python
python处理xml文件的方法小结
2017/05/02 Python
Python网络编程之TCP与UDP协议套接字用法示例
2018/02/02 Python
python实现zabbix发送短信脚本
2018/09/17 Python
Django 实现图片上传和显示过程详解
2019/07/18 Python
Python 字典中的所有方法及用法
2020/06/10 Python
Python 高效编程技巧分享
2020/09/10 Python
HTML5仿微信聊天界面、微信朋友圈实例代码
2018/01/29 HTML / CSS
Bose加拿大官方网站:美国知名音响品牌
2019/03/21 全球购物
毕业生就业自荐书
2013/12/15 职场文书
出国英文推荐信
2014/05/10 职场文书
办公室主任四风问题对照检查材料思想汇报
2014/09/28 职场文书
学习保证书怎么写
2015/02/26 职场文书
学生病假条怎么写
2015/08/17 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js
Rust中的Struct使用示例详解
2022/08/14 Javascript