Go语学习笔记 - 环境安装、接口测试 | Web框架Gin一
学习笔记,写到哪是哪。
基础语法差不多了,需要开始实践到一下项目,先来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
注意
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接口
注意
1、使用context.DefaultPostForm方法可以提供一个默认值。
2、可以使用gin.H方法构造json结构返回。
3、将获得打参数反序列化为结构体,这部分的代码使用到之前讲json解析的笔记。
小结
本篇笔记主要是对gin的简单使用,我希望把这个项目慢慢完善,比如项目结构优化(可以贴合mvc结构)、日志功能、配置文件、数据库操作、缓存操作、高并发设计等等。项目持续升级,从中慢慢熟悉go语言的项目结构。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhgfhjcf
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
TikTok加速器哪个好免费的TK加速器推荐
TK小达人 10-01