详解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语言操作数据库及其常规操作的示例代码
Apr 21 Golang
解决golang在import自己的包报错的问题
Apr 29 Golang
解决golang post文件时Content-Type出现的问题
May 02 Golang
解决golang 关于全局变量的坑
May 06 Golang
Golang中异常处理机制详解
Jun 08 Golang
K8s部署发布Golang应用程序的实现方法
Jul 16 Golang
Golang数据类型和相互转换
Apr 12 Golang
Golang 链表的学习和使用
Apr 19 Golang
Golang获取List列表元素的四种方式
Apr 20 Golang
Golang map映射的用法
Apr 22 Golang
Go gorilla securecookie库的安装使用详解
Aug 14 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中删除字符串中最先出现某个字符的实现代码
2013/02/03 PHP
php商品对比功能代码分享
2015/09/24 PHP
详解WordPress中用于更新和获取用户选项数据的PHP函数
2016/03/08 PHP
HTTP头隐藏PHP版本号实现过程解析
2020/12/09 PHP
雄兵连第三季海报曝光,艾妮熙德成主角,蔷薇新造型
2021/03/09 国漫
静态的动态续篇之来点XML
2006/08/15 Javascript
JavaScript高级程序设计阅读笔记(五) ECMAScript中的运算符(一)
2012/02/27 Javascript
jQuery实现模拟marquee标签效果
2015/07/14 Javascript
30分钟快速掌握Bootstrap框架
2016/05/24 Javascript
javascript如何创建对象
2016/08/29 Javascript
Bootstrap CSS组件之输入框组
2016/12/17 Javascript
Javascript中的 “&” 和 “|” 详解
2017/02/02 Javascript
vue中appear的用法
2017/08/17 Javascript
Vue中的scoped实现原理及穿透方法
2018/05/15 Javascript
vue里面v-bind和Props 利用props绑定动态数据的方法
2018/08/27 Javascript
Egg.js 中 AJax 上传文件获取参数的方法
2018/10/10 Javascript
vue组件传值的实现方式小结【三种方式】
2020/02/05 Javascript
Vue 打包体积优化方案小结
2020/05/20 Javascript
nodejs使用Sequelize框架操作数据库的实现
2020/10/21 NodeJs
基于JavaScript实现随机点名器
2021/02/25 Javascript
[01:45]绝对公平!DOTA2队长征召模式详解
2014/04/25 DOTA
python实现ipsec开权限实例
2014/11/11 Python
基于多进程中APScheduler重复运行的解决方法
2019/07/22 Python
Python实现朴素贝叶斯的学习与分类过程解析
2019/08/24 Python
Python 格式化输出_String Formatting_控制小数点位数的实例详解
2020/02/04 Python
简单了解django文件下载方式
2020/02/10 Python
Python装饰器如何实现修复过程解析
2020/09/05 Python
python切片作为占位符使用实例讲解
2021/02/17 Python
武汉世纪畅想数字传播有限公司 .NET笔试题
2015/06/13 面试题
英文简历自荐信范文
2013/12/11 职场文书
小学科学教学反思
2014/01/26 职场文书
祖国在我心中演讲稿200字
2014/08/28 职场文书
领导干部作风建设总结
2014/10/23 职场文书
护林员个人总结
2015/03/04 职场文书
实习介绍信范文
2015/05/05 职场文书
2015年医院后勤工作总结
2015/05/20 职场文书