Gin框架学习 | 青训营

66 阅读2分钟

Gin安装与使用

gin安装

这个安装真的费了不少功夫,之前安装之后goland、可以使用就没继续管了,没想到现在问题又爆出来了。不在描述go、语言的安装过程了,直接开始gin框架的安装。

首先,我的系统环境变量没有配置好,gopath自动设置的C盘下的%USERPROFILE%/go,这个位置可以改成自己的项目位置。使用go env命令查看go相关环境变量,这里检查一下GOPATH变量,在 GOPATH 指定的工作目录下,代码总是会保存在 GOPATH/src 目录下。在工程经过 go build、go install 或 go get 等指令后,会将产生的二进制可执行文件放在 GOPATH/bin 目录下,生成的中间缓存文件会被保存在 GOPATH/pkg 下。所以大家根据自己需要设置一下GOPATH变量的位置。

设置一下GOBIN环境变量为%GOPATH\bin(仅供参考),GOROOT环境变量就是自己GO、语言的安装目录了。 环境变量设置好以后,就可以使用go get -u github.com/gin-gonic/gin命令下载Gin了。

我在运行这个命令的时候一直连接失败,因为连接失败的小伙伴可以参考下面的操作:
go env -w GO111MODULE=on,这个on是小写
go env -w GOPROXY=https://goproxy.io,direct

gin使用

HelloWorld

import "github.com/gin-gonic/gin"  

func main() {  
r := gin.Default()  
r.GET("/", index)  
r.Run(":8001")  
}  

func index(c *gin.Context) {  
c.JSON(200, gin.H{  
"message": "HelloWorld",  
})  
}

image.png

image.png

使用 GET, POST, PUT, PATCH, DELETE and OPTIONS

 r.GET("/someGet", getting)
 r.POST("/somePost", posting)
 r.PUT("/somePut", putting)
 r.DELETE("/someDelete", deleting)
 r.PATCH("/somePatch", patching)
 r.HEAD("/someHead", head)
 r.OPTIONS("/someOptions", options)

路由参数

func main() {  
r := gin.Default()  
r.GET("/user/:name/*action", index)  
r.Run(":8001")  
}  

func index(c *gin.Context) {  
name := c.Param("name")  
action := c.Param("action")  
c.String(http.StatusOK, "Hello %s", name+action)  
}

image.png

image.png 这种既可以匹配/user/asd/,也可以匹配/user/asd/asd。

字符串参数

func main() {  
r := gin.Default()  
r.GET("/user", index)  
r.Run(":8001")  
}  

func index(c *gin.Context) {  
name := c.Query("name")  
age := c.DefaultQuery("age", "10")  
c.String(http.StatusOK, "Hello %s you %s", name, age)  
}

image.png

表单提交

func main() {  
r := gin.Default()  
r.GET("/form", index)  
r.Run(":8001")  
}  

func index(c *gin.Context) {  
messgae := c.PostForm("message")  
nickname := c.DefaultPostForm("nickname", "yzsyzs")  
c.JSON(200, gin.H{  
"status": "posted",  
"message": messgae,  
"nickname": nickname,  
})  
}

image.png

可以使用Postman软件来模拟发送请求。

map作为表单参数

func main() {  
r := gin.Default()  
r.GET("/post", index)  
r.Run(":8001")  
}  

func index(c *gin.Context) {  
ids := c.QueryMap("ids")  
names := c.PostFormMap("names")  
c.JSON(200, gin.H{  
"status": "posted",  
"ids": ids,  
"names": names,  
})  
}

image.png

上传文件

文件上传前端页面代码:

<!DOCTYPE html>
<html lang="zh-CN">
<head>
    <title>上传文件示例</title>
</head>
<body>
<form action="/upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="上传">
</form>
</body>
</html>

后端gin框架使用代码:

func main() {  
r := gin.Default()  
r.MaxMultipartMemory = 8 << 20  
r.POST("/upload", index)  
r.Run(":8001")  
}  

func index(c *gin.Context) {  
file, _ := c.FormFile("file")  
log.Println(file.Filename)  

c.SaveUploadedFile(file, fmt.Sprintf("D:/go/%s",file.Filename))  
c.String(http.StatusOK, fmt.Sprintf("%s uploaded", file.Filename))  

}