详解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 相关文章推荐
Go语言切片前或中间插入项与内置copy()函数详解
Apr 27 Golang
Go语言中break label与goto label的区别
Apr 28 Golang
go设置多个GOPATH的方式
May 05 Golang
golang 实现并发求和
May 08 Golang
GoLang中生成UUID唯一标识的实现
May 08 Golang
K8s部署发布Golang应用程序的实现方法
Jul 16 Golang
Go语言并发编程 sync.Once
Oct 16 Golang
浅谈GO中的Channel以及死锁的造成
Mar 18 Golang
详解Golang如何优雅的终止一个服务
Mar 21 Golang
Golang并发工具Singleflight
May 06 Golang
详解Go语言中Get/Post请求测试
Jun 01 Golang
Python测试框架pytest核心库pluggy详解
Aug 05 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
中国的第一台收音机
2021/03/01 无线电
PHP隐形一句话后门,和ThinkPHP框架加密码程序(base64_decode)
2011/11/02 PHP
php使用strtotime和date函数判断日期是否有效代码分享
2013/12/25 PHP
PHP小教程之实现链表
2014/06/09 PHP
Yii2实现ajax上传图片插件用法
2016/04/28 PHP
使用PHP免费发送定时短信的实例
2016/10/24 PHP
PHP getDocNamespaces()函数讲解
2019/02/03 PHP
js宝典学习笔记(上)
2007/01/10 Javascript
JavaScript 学习笔记(十三)Dom创建表格
2010/01/21 Javascript
jQuery中调用WebService方法小结
2011/03/28 Javascript
javascript中的缓动效果实现程序
2012/12/29 Javascript
js文件包含的几种方式介绍
2014/09/28 Javascript
jQuery中$.extend()用法实例
2015/06/24 Javascript
javascript实现给定半径求出圆的面积
2015/06/26 Javascript
js实现的二分查找算法实例
2016/01/21 Javascript
详解AngularJS如何实现跨域请求
2016/08/22 Javascript
Jquery遍历select option和添加移除option的实现方法
2016/08/26 Javascript
js禁止Backspace键使浏览器后退的实现方法
2017/09/01 Javascript
基于jQuery实现的设置文本区域的光标位置
2018/06/15 jQuery
element上传组件循环引用及简单时间倒计时的实现
2018/10/01 Javascript
Fetch超时设置与终止请求详解
2019/05/18 Javascript
Python中用pycurl监控http响应时间脚本分享
2015/02/02 Python
python自动12306抢票软件实现代码
2018/02/24 Python
python 实现在Excel末尾增加新行
2018/05/02 Python
Tensorflow使用tfrecord输入数据格式
2018/06/19 Python
详解10个可以快速用Python进行数据分析的小技巧
2019/06/24 Python
win10环境下配置vscode python开发环境的教程详解
2019/10/16 Python
python实现猜数游戏(保存游戏记录)
2020/06/22 Python
Nili Lotan官网:Nili Lotan同名品牌
2018/01/07 全球购物
索尼巴西商店:Sony巴西
2019/06/21 全球购物
生活小常识广播稿
2014/09/16 职场文书
2014年行政执法工作总结
2014/12/11 职场文书
2015年客房服务员工作总结
2015/05/15 职场文书
亮剑观后感300字
2015/06/05 职场文书
广播体操比赛主持词
2015/06/29 职场文书
2015年乡镇组织委员工作总结
2015/10/23 职场文书