Gin 响应
12/27/2023
# 状态码
200 表示响应正常 http.StatusOK
# 响应
# 返回字符串
func _string(c *gin.Context) {
c.String(http.StatusOK, "返回txt")
}
# 返回 json
# 结构体方式
func _json(c *gin.Context) {
type UserInfo struct {
UserName string `json:"user_name"`
Age int `json:"age"`
Password string `json:"-"` // 不返回该字段,使用 -
}
user := UserInfo{"fly", 23, "123456"}
c.JSON(200, user)
}
# map方式
func _json(c *gin.Context) {
userMap := map[string]any{
"user_name": "fly",
"age": 23,
}
c.JSON(200, userMap)
}
# gin.H 方法
func _json(c *gin.Context) {
c.JSON(200, gin.H{"username": "fly", "age": 24})
}
# 返回 XML
func _xml(c *gin.Context) {
c.XML(200, gin.H{"username": "fly", "age": 23, "status": http.StatusOK})
}
# 返回 YAML
func _yaml(c *gin.Context) {
c.YAML(200, gin.H{"username": "fly", "age": 23, "status": http.StatusOK})
}
# 返回 HTML
需要先试用LoadHTMLGlob()
或者LoadHTMLFiles()
方法来加载模板文件。
package main
import (
"github.com/gin-gonic/gin"
"net/http"
)
func _html(c *gin.Context) {
type UserInfo struct {
UserName string `json:"user_name"`
Age int `json:"age"`
Password string `json:"-"` // 不返回该字段,使用 -
}
user := UserInfo{"fly", 23, "123456"}
c.HTML(200, "index.html", user)
}
func main() {
router := gin.Default()
// 加载模板目录下所有的模板文件
router.LoadHTMLGlob("templates/*")
router.GET("/html", _html)
router.Run(":80")
}
index.html 文件(path: templates/index.html)
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>模板</title>
</head>
<body>
<header>你好 {{.UserName}}</header>
</body>
</html>
在模板中使用这个UserName属性,需要使用{ {.UserName}}
# 响应文件
// 在 golang 中, 没有相对文件的路径, 它只有相对项目的路径
// 网页请求这个静态目录的前缀,第二个参数是一个目录,注意:前缀不要重复
router.StaticFS("/static", http.Dir("static/static"))
// 配置单个文件,网页请求的路由会访问文件的路径
router.StaticFile("/static/hero.jpg", "static/hero.jpg")
# 重定向
// 重定向
func _redirect(c *gin.Context) {
c.Redirect(302, "http://www.baidu.com")
}
func main() {
router := gin.Default()
router.GET("/baidu", _redirect)
router.Run(":80")
}