详解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项目中使用init()
Apr 12 Golang
Go语言中的UTF-8实现
Apr 26 Golang
golang 生成对应的数据表struct定义操作
Apr 28 Golang
Golang标准库syscall详解(什么是系统调用)
May 25 Golang
go web 预防跨站脚本的实现方式
Jun 11 Golang
浅谈Go语言多态的实现与interface使用
Jun 16 Golang
入门学习Go的基本语法
Jul 07 Golang
Go语言基础函数基本用法及示例详解
Nov 17 Golang
golang定时器
Apr 14 Golang
golang的文件创建及读写操作
Apr 14 Golang
Golang 字符串的常见操作
Apr 19 Golang
Golang并发工具Singleflight
May 06 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实现图片上传并压缩
2015/12/22 PHP
学习ExtJS Column布局
2009/10/08 Javascript
Jquery读取URL参数小例子
2013/08/30 Javascript
js向上无缝滚动,网站公告效果 具体代码
2013/11/18 Javascript
javascript图片相似度算法实现 js实现直方图和向量算法
2014/01/14 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
2016/06/02 Javascript
jquery mobile 实现自定义confirm确认框效果的简单实例
2016/06/17 Javascript
Jquery Easyui表单组件Form使用详解(30)
2016/12/19 Javascript
javascript中的面向对象
2017/03/30 Javascript
JavaScript该如何学习 怎样轻松学习JavaScript
2017/06/12 Javascript
Vue.js单向绑定和双向绑定实例分析
2018/08/14 Javascript
VUE2.0 ElementUI2.0表格el-table自适应高度的实现方法
2018/11/28 Javascript
Jquery 动态添加元素并添加点击事件实现过程解析
2019/10/12 jQuery
angularjs模态框的使用代码实例
2019/12/20 Javascript
基于vue实现微博三方登录流程解析
2020/11/04 Javascript
js简单粗暴的发布订阅示例代码
2021/01/23 Javascript
Vue SPA 首屏优化方案
2021/02/26 Vue.js
Python中使用scapy模拟数据包实现arp攻击、dns放大攻击例子
2014/10/23 Python
python3 与python2 异常处理的区别与联系
2016/06/19 Python
浅谈Python中的可变对象和不可变对象
2017/07/07 Python
Python列表生成式与生成器操作示例
2018/08/01 Python
python高斯分布概率密度函数的使用详解
2019/07/10 Python
基于python计算滚动方差(标准差)talib和pd.rolling函数差异详解
2020/06/08 Python
matplotlib grid()设置网格线外观的实现
2021/02/22 Python
雅诗兰黛旗下走天然植物路线的彩妆品牌:Prescriptives
2016/08/14 全球购物
美国最佳选择产品网站:Best Choice Products
2019/05/27 全球购物
财务会计毕业生个人求职信
2014/02/03 职场文书
群众对十八届四中全会的期盼
2014/10/17 职场文书
三孔导游词
2015/02/05 职场文书
大学生党员个人总结
2015/02/13 职场文书
村主任当选感言
2015/08/01 职场文书
纪念建国70周年演讲稿
2019/07/19 职场文书
教你怎么用Python生成九宫格照片
2021/05/20 Python
MySQL删除和插入数据很慢的问题解决
2021/06/03 MySQL
Redis 的查询很快的原因解析及Redis 如何保证查询的高效
2022/03/16 Redis
element tree树形组件回显数据问题解决
2022/08/14 Javascript