gin 基础教程

// 匹配 /user/geektutu
r.GET("/user/:name", func(c *gin.Context) {
name := c.Param(“name”)
c.String(http.StatusOK, “Hello %s”, name)
})

// 匹配users?name=xxx&role=xxx,role可选
r.GET("/users", func(c *gin.Context) {
name := c.Query(“name”)
role := c.DefaultQuery(“role”, “teacher”)
c.String(http.StatusOK, “%s is %s”, name, role)
})

// POST
r.POST("/form", func(c *gin.Context) {
username := c.PostForm(“username”)
password := c.DefaultPostForm(“username”, “000000”) // 可设置默认值

c.JSON(http.StatusOK, gin.H{
	"username": username,
	"password": password,
})

})

// GET 和 POST 混合
r.POST("/posts", func(c *gin.Context) {
id := c.Query(“id”)
page := c.DefaultQuery(“page”, “0”)
username := c.PostForm(“username”)
password := c.DefaultPostForm(“username”, “000000”) // 可设置默认值

c.JSON(http.StatusOK, gin.H{
	"id":       id,
	"page":     page,
	"username": username,
	"password": password,
})

})

map参数

r.POST("/post", func(c *gin.Context) {
ids := c.QueryMap(“ids”)
names := c.PostFormMap(“names”)

c.JSON(http.StatusOK, gin.H{
	"ids":   ids,
	"names": names,
})

})

r.GET("/redirect", func(c *gin.Context) {
c.Redirect(http.StatusMovedPermanently, “/index”)
})

r.GET("/goindex", func(c *gin.Context) {
c.Request.URL.Path = “/”
r.HandleContext©
})

分组

// group routes 分组路由
defaultHandler := func(c *gin.Context) {
c.JSON(http.StatusOK, gin.H{
“path”: c.FullPath(),
})
}
// group: v1
v1 := r.Group("/v1")
{
v1.GET("/posts", defaultHandler)
v1.GET("/series", defaultHandler)
}
// group: v2
v2 := r.Group("/v2")
{
v2.GET("/posts", defaultHandler)
v2.GET("/series", defaultHandler)
}

r.POST("/upload1", func(c *gin.Context) {
file, _ := c.FormFile(“file”)
// c.SaveUploadedFile(file, dst)
c.String(http.StatusOK, “%s uploaded!”, file.Filename)
})

多个文件上传

r.POST("/upload2", func(c *gin.Context) {
// Multipart form
form, _ := c.MultipartForm()
files := form.File[“upload[]”]

for _, file := range files {
	log.Println(file.Filename)
	// c.SaveUploadedFile(file, dst)
}
c.String(http.StatusOK, "%d files uploaded!", len(files))

})

中间件

// 作用于全局
r.Use(gin.Logger())
r.Use(gin.Recovery())

// 作用于单个路由
r.GET("/benchmark", MyBenchLogger(), benchEndpoint)

// 作用于某个组
authorized := r.Group("/")
authorized.Use(AuthRequired())
{
authorized.POST("/login", loginEndpoint)
authorized.POST("/submit", submitEndpoint)
}

Python 的 Flask框架,有 debug 模式,启动时传入 debug=True 就可以热加载(Hot Reload, Live Reload)了。即更改源码,保存后,自动触发更新,浏览器上刷新即可。免去了杀进程、重新启动之苦。

Gin 原生不支持,但有很多额外的库可以支持。例如

github.com/codegangsta/gin
github.com/pilu/fresh
这次,我们采用 github.com/pilu/fresh 。

1
go get -v -u github.com/pilu/fresh
安装好后,只需要将go run main.go命令换成fresh即可。每次更改源文件,代码将自动重新编译(Auto Compile)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值