*gin.Context
时间: 2023-07-23 15:55:28 浏览: 151
`gin.Context` 是 Gin 框架中的上下文对象,它包含了一个 HTTP 请求的所有信息和处理该请求所需的方法。在处理 HTTP 请求时,我们可以通过 `gin.Context` 对象获取请求的参数、请求头、请求体等信息,并且可以设置响应状态码、响应头、响应体等信息。同时,`gin.Context` 还提供了一些方便的方法来处理请求和响应,比如获取请求参数、输出 JSON 数据等。
相关问题
package main import "github.com/gin-gonic/gin" func MyHandler(c *gin.Context) { c.JSON(200, gin.H{ "hello": "hello world", }) } func Login(c *gin.Context) { c.HTML(200, "login.html", nil) } func DoLogin(c *gin.Context) { username := c.PostForm("username") password := c.PostForm("password") c.HTML(200, "welcome.html", gin.H{ "username": username, "password": password, }) } func main() { e := gin.Default() e.LoadHTMLGlob("templates/*") e.GET("/login", Login) e.POST("/login", DoLogin) e.Run(":8888") }
这段代码是使用 Go 语言中的 Gin 框架编写的一个简单的 Web 应用程序。它使用了 Gin 的默认中间件来记录 HTTP 请求和恢复从 panic 中恢复,并使用了 Gin 的 HTML 渲染功能来渲染 login.html 和 welcome.html 两个页面。在 main() 函数中,它首先创建了一个默认的 gin.Engine 实例,然后将 HTML 模板文件所在的目录指定为 templates/,并分别为 GET 和 POST 请求注册了两个路由处理函数。当客户端请求 /login 页面时,将渲染 login.html 并返回给客户端,当客户端提交表单时,将接收表单数据并将其渲染到 welcome.html 页面中。
改正如下代码,要求可以正常运行package main import ( "fmt" "github.com/gin-gonic/gin" ) func TestMW(c *gin.Context) { c.String(200, "hello,%s", "ghz") } func MyMiddleware1(c *gin.Context) { fmt.Println("我的第一个中间件") } func MyMiddleware2(c *gin.Context) { fmt.Println("我的第二个中间件") } func main() { /* func Default() *Engine { debugPrintWARNINGDefault() engine := New() engine.Use(Logger(), Recovery()) return engine } */ // e := gin.Default() // e := gin.New() e := gin.Default() e.Use(MyMiddleware1, MyMiddleware2) e.GET("testmw", TestMW) e.Run() }
你需要将 MyMiddleware1 和 MyMiddleware2 函数的参数类型改为 gin.HandlerFunc,代码如下:
```go
package main
import (
"fmt"
"github.com/gin-gonic/gin"
)
func TestMW(c *gin.Context) {
c.String(200, "hello,%s", "ghz")
}
func MyMiddleware1() gin.HandlerFunc {
return func(c *gin.Context) {
fmt.Println("我的第一个中间件")
c.Next()
}
}
func MyMiddleware2() gin.HandlerFunc {
return func(c *gin.Context) {
fmt.Println("我的第二个中间件")
c.Next()
}
}
func main() {
e := gin.Default()
e.Use(MyMiddleware1(), MyMiddleware2())
e.GET("testmw", TestMW)
e.Run()
}
```
其中 MyMiddleware1 和 MyMiddleware2 函数需要返回一个 gin.HandlerFunc 类型的函数,这个返回的函数才能被 gin 使用。在返回的函数中,我们需要手动调用 c.Next(),以便让请求继续往下执行。
阅读全文