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",
})
}
使用 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)
}
这种既可以匹配/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)
}
表单提交
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,
})
}
可以使用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,
})
}
上传文件
文件上传前端页面代码:
<!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))
}