详解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如何去除多余空白字符(含制表符)
Apr 25 Golang
Go语言中的UTF-8实现
Apr 26 Golang
golang slice元素去重操作
Apr 30 Golang
golang中的并发和并行
May 08 Golang
golang 实现并发求和
May 08 Golang
Golang实现AES对称加密的过程详解
May 20 Golang
详解Go语言Slice作为函数参数的使用
Jul 02 Golang
Go语言并发编程 sync.Once
Oct 16 Golang
Golang流模式之grpc的四种数据流
Apr 13 Golang
Golang 切片(Slice)实现增删改查
Apr 22 Golang
GoFrame基于性能测试得知grpool使用场景
Jun 21 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
thinkphp模板继承实例简述
2014/11/26 PHP
详解PHP实现执行定时任务
2015/12/21 PHP
网页上的Javascript编辑器和代码格式化
2010/04/25 Javascript
Javascript 自适应高度的Tab选项卡
2011/04/05 Javascript
JS代码放在head和body中的区别分析
2011/12/01 Javascript
使用npm发布Node.JS程序包教程
2015/03/02 Javascript
jQuery实现行文字链接提示效果的方法
2015/03/10 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
AngularJS入门教程之Helloworld示例
2016/12/25 Javascript
半个小时学json(json传递示例)
2016/12/25 Javascript
使用Angular CLI进行Build(构建)和Serve详解
2018/03/24 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
微信小程序自定义组件之可清除的input组件
2018/07/17 Javascript
vue中rem的配置的方法示例
2018/08/30 Javascript
解决vue动态为数据添加新属性遇到的问题
2018/09/18 Javascript
实例讲解vue源码架构
2019/01/24 Javascript
微信小程序在text文本实现多种字体样式
2019/11/08 Javascript
vue vant Area组件使用详解
2019/12/09 Javascript
Javascript 模拟mvc实现点餐程序案例详解
2020/12/24 Javascript
[03:48]大碗DOTA
2019/07/25 DOTA
Python完全新手教程
2007/02/08 Python
Python socket编程实例详解
2015/05/27 Python
python操作字典类型的常用方法(推荐)
2016/05/16 Python
python中关于for循环的碎碎念
2017/06/30 Python
python简单区块链模拟详解
2019/07/03 Python
Python3基本输入与输出操作实例分析
2020/02/14 Python
python实现快速文件格式批量转换的方法
2020/10/16 Python
浅谈cookie和localStorage那些事
2019/08/27 HTML / CSS
新东网科技Java笔试题
2012/07/13 面试题
2014年应届大学生毕业自我鉴定
2014/01/31 职场文书
2015年民主生活会发言材料
2014/12/15 职场文书
学校捐书倡议书
2015/04/27 职场文书
迁徙的鸟观后感
2015/06/09 职场文书
会计手工模拟做账心得体会
2016/01/22 职场文书
Spring Boot项目传参校验的最佳实践指南
2022/04/05 Java/Android
Python使用socket去实现TCP客户端和TCP服务端
2022/04/12 Python