详解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 Gin实现文件上传下载的示例代码
Apr 02 Golang
一文读懂go中semaphore(信号量)源码
Apr 03 Golang
Go缓冲channel和非缓冲channel的区别说明
Apr 25 Golang
基于Go Int转string几种方式性能测试
Apr 28 Golang
Golang中interface{}转为数组的操作
Apr 30 Golang
解决Golang中goroutine执行速度的问题
May 02 Golang
golang协程池模拟实现群发邮件功能
May 02 Golang
解决Goland 同一个package中函数互相调用的问题
May 06 Golang
Golang流模式之grpc的四种数据流
Apr 13 Golang
Golang bufio详细讲解
Apr 21 Golang
Golang 入门 之url 包
May 04 Golang
Go web入门Go pongo2模板引擎
May 20 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使用parse_str实现查询字符串解析到变量中的方法
2017/02/17 PHP
laravel实现批量更新多条记录的方法示例
2017/10/22 PHP
laravel框架关于搜索功能的实现
2018/03/15 PHP
Prototype使用指南之form.js
2007/01/10 Javascript
JavaScript Cookie 直接浏览网站分网址
2009/12/08 Javascript
ext前台接收action传过来的json数据示例
2014/06/17 Javascript
AngularJS转换响应内容
2016/01/27 Javascript
基于JavaScript实现自动更新倒计时效果
2016/12/19 Javascript
详解vue 模版组件的三种用法
2017/07/21 Javascript
详解微信小程序实现跑马灯效果(附完整代码)
2019/04/29 Javascript
Vue实现按钮级权限方案
2019/11/21 Javascript
React实现类似淘宝tab居中切换效果的示例代码
2020/06/02 Javascript
Vue自定义组件双向绑定实现原理及方法详解
2020/09/03 Javascript
Openlayers学习之地图比例尺控件
2020/09/28 Javascript
[45:52]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第二场 12.09
2020/12/12 DOTA
在Python上基于Markov链生成伪随机文本的教程
2015/04/17 Python
python实现class对象转换成json/字典的方法
2016/03/11 Python
全面了解python字符串和字典
2016/07/07 Python
Python 实现一个颜色色值转换的小工具
2016/12/06 Python
Python实现的选择排序算法原理与用法实例分析
2017/11/22 Python
Python编程实现使用线性回归预测数据
2017/12/07 Python
python实现批量修改图片格式和尺寸
2018/06/07 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
Python基于Tensor FLow的图像处理操作详解
2020/01/15 Python
详解在Python中使用Torchmoji将文本转换为表情符号
2020/07/27 Python
Python实现爬取网页中动态加载的数据
2020/08/17 Python
python爬虫scrapy基本使用超详细教程
2021/02/20 Python
Habitat家居英国官方网站:沙发、家具、照明、厨房和户外
2019/12/12 全球购物
建筑装饰学院室内设计专业个人自我评价
2013/12/07 职场文书
给老婆的保证书范文
2014/04/28 职场文书
植树节活动总结
2014/04/30 职场文书
2013年最新自荐信范文
2014/06/23 职场文书
2014年幼儿园重阳节活动方案
2014/09/16 职场文书
2014年监理工作总结范文
2014/11/17 职场文书
2015年打非治违工作总结
2015/04/02 职场文书
阿里云服务器(windows)手动部署FTP站点详细教程
2022/08/05 Servers