详解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 嵌套 interface 的赋值问题
Apr 29 Golang
golang elasticsearch Client的使用详解
May 05 Golang
golang 实现并发求和
May 08 Golang
聊聊golang中多个defer的执行顺序
May 08 Golang
Go 语言结构实例分析
Jul 04 Golang
go使用Gin框架利用阿里云实现短信验证码功能
Aug 04 Golang
Go中的条件语句Switch示例详解
Aug 23 Golang
Go 通过结构struct实现接口interface的问题
Oct 05 Golang
golang语言指针操作
Apr 14 Golang
深入理解 Golang 的字符串
May 04 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如何透过ODBC来存取数据库
2006/10/09 PHP
PHP利用hash冲突漏洞进行DDoS攻击的方法分析
2015/03/26 PHP
PHP中读取文件的几个方法总结(推荐)
2016/06/03 PHP
PHP PDOStatement::bindValue讲解
2019/01/30 PHP
php函数式编程简单示例
2019/08/08 PHP
JavaScript Date对象使用总结
2009/05/14 Javascript
当jQuery遭遇CoffeeScript的时候 使用分享
2011/09/17 Javascript
jQuery 在光标定位的地方插入文字的插件
2012/05/10 Javascript
关于Javascript加载执行优化的研究报告
2014/12/16 Javascript
简介JavaScript中的getUTCFullYear()方法的使用
2015/06/10 Javascript
JavaScript实现带缓冲效果的随屏滚动漂浮广告代码
2015/11/06 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
2016/09/27 Javascript
JS实现加载和读取XML文件的方法详解
2017/04/24 Javascript
nodejs中sleep功能实现暂停几秒的方法
2017/07/12 NodeJs
微信小程序 rich-text的使用方法
2017/08/04 Javascript
vue解决跨域路由冲突问题思路解析
2017/11/03 Javascript
红黑树的插入详解及Javascript实现方法示例
2018/03/26 Javascript
JavaScript 实现下雪特效的示例代码
2020/09/09 Javascript
element-ui 弹窗组件封装的步骤
2021/01/22 Javascript
[56:29]Secret vs Optic 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python利用ansible分发处理任务
2015/08/04 Python
Python 正则表达式匹配字符串中的http链接方法
2018/12/25 Python
详解Django项目中模板标签及模板的继承与引用(网站中快速布置广告)
2019/03/27 Python
详解Python 中sys.stdin.readline()的用法
2019/09/12 Python
Python代码需要缩进吗
2020/07/01 Python
python打开音乐文件的实例方法
2020/07/21 Python
澳大利亚药房在线:ThePharmacy
2017/10/04 全球购物
迪卡侬荷兰官网:Decathlon荷兰
2017/10/29 全球购物
美国椅子和沙发制造商:La-Z-Boy
2020/10/25 全球购物
Java程序员面试题
2016/09/27 面试题
农村党支部先进事迹
2014/01/14 职场文书
社区优秀志愿者材料
2014/02/02 职场文书
毕业生自荐材料范文
2014/12/30 职场文书
辞职信的写法
2015/02/27 职场文书
暗恋桃花源观后感
2015/06/12 职场文书
2016党员干部反腐倡廉心得体会
2016/01/13 职场文书