详解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中什么是nil
Apr 29 Golang
浅谈golang 中time.After释放的问题
May 05 Golang
go设置多个GOPATH的方式
May 05 Golang
Golang 获取文件md5校验的方法以及效率对比
May 08 Golang
Golang 语言控制并发 Goroutine的方法
Jun 30 Golang
Golang使用Panic与Recover进行错误捕获
Mar 22 Golang
golang实现浏览器导出excel文件功能
Mar 25 Golang
Golang 1.18 多模块Multi-Module工作区模式的新特性
Apr 11 Golang
Golang Elasticsearches 批量修改查询及发送MQ
Apr 19 Golang
Golang并发工具Singleflight
May 06 Golang
Golang gRPC HTTP协议转换示例
Jun 16 Golang
基于Python实现西西成语接龙小助手
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
php使用base64加密解密图片示例分享
2014/01/20 PHP
PHP转盘抽奖接口实例
2015/02/09 PHP
php使用unset()删除数组中某个单元(键)的方法
2015/02/17 PHP
推荐:极酷右键菜单
2006/11/29 Javascript
javascript事件模型代码
2007/07/01 Javascript
在JavaScript中,为什么要尽可能使用局部变量?
2009/04/06 Javascript
Prototype Date对象 学习
2009/07/12 Javascript
setTimeout()与setInterval()方法区别介绍
2013/12/24 Javascript
JS实现点击按钮获取页面高度的方法
2015/11/02 Javascript
Jquery基础之事件操作详解
2016/06/14 Javascript
Angular 页面跳转时传参问题
2016/08/01 Javascript
vuejs动态组件给子组件传递数据的方法详解
2016/09/09 Javascript
jQuery实现二维码扫描功能
2017/01/09 Javascript
react.js 翻页插件实例代码
2017/01/19 Javascript
vue项目搭建以及全家桶的使用详细教程(小结)
2018/12/19 Javascript
ES6 let和const定义变量与常量的应用实例分析
2019/06/27 Javascript
原生JavaScript实现五子棋游戏
2020/11/09 Javascript
Python寻找路径和查找文件路径的示例
2019/07/10 Python
浅谈django url请求与数据库连接池的共享问题
2019/08/29 Python
使用django和vue进行数据交互的方法步骤
2019/11/11 Python
基于python检查矩阵计算结果
2020/05/21 Python
Python自定义sorted排序实现方法详解
2020/09/18 Python
8款使用 CSS3 实现超炫的 Loading(加载)的动画效果
2015/03/17 HTML / CSS
基于CSS3实现的漂亮Menu菜单效果代码
2015/09/10 HTML / CSS
浅谈CSS3特性查询(Feature Query: @supports)功能简介
2017/07/31 HTML / CSS
阿根廷在线宠物商店:Puppis
2018/03/23 全球购物
节省高达65%的城市景点费用:Go City
2019/07/06 全球购物
荣耀俄罗斯官网:HONOR俄罗斯
2020/10/31 全球购物
怎样比较两个类型为String的字符串
2016/08/17 面试题
MYSQL支持事务吗
2013/08/09 面试题
营销专业应届生求职信
2013/11/26 职场文书
个人简历中自我评价
2014/02/11 职场文书
观看《永远的雷锋》心得体会
2014/03/12 职场文书
就业意向书范本
2015/05/11 职场文书
个人售房合同协议书
2016/03/21 职场文书
如何更改Win11声音输出设备?Win11声音输出设备四种更改方法
2022/04/08 数码科技