G

[Golang]Gin框架 2.响应

RoLingG 2023-05-27

因为这一章内容比较直观,所以直接上代码+注释实现后看一下就懂了。

1.响应字符串

// 响应字符串
func _String(context *gin.Context) {
    context.String(200, "你好,RoLingG") //响应字符串。    
    //200是状态码,当状态码为200时为正常响应(这个可以去查相关http的源码,讲的很清楚)    
    //一般我们会对这个响应进行封装
}
func main() {
    router := gin.Default()
    router.GET("/string", _String)
    router.Run(":80")
}

2.响应Json(最为常用)(重点)

响应Json分为:①响应Json中的结构体、②响应Json中的Map、③直接响应Json
①无内容响应Json

 func _Json(context *gin.Context) {
    context.JSON()    JSON接收值是任意的,但是返回不是任意的,过程将进去的任意值通过json转换后返回出json值
}
func main() {
    router := gin.Default()
    router.GET("/json", _Json)
    router.Run(":80")
}

②响应Json中的结构体

func _Json(context *gin.Context) {
    //①json响应结构体    (用的最多)
    type UserInfo struct {
        Name     string `json:"user_name"` //Name、Age这些属性可以用`json`隐写(换掉)        Tag的应用
        Age      int    `json:"user_age"`
        Password string `json:"-"` //敏感信息不显示出来可以用`json:"-"`去进行不渲染,忽略转换json
    }
    user := UserInfo{
        Name:     "小王",
        Age:      18,
        Password: "123456",
    }
    context.JSON(200, user)    //响应结构体
}
func main() {
    router := gin.Default()
    router.GET("/json", _Json)
    router.Run(":80")
}

③响应Json中的Map

func _Json(context *gin.Context) {
    //②json响应Map    无序
    userMap := map[string]string{
        "UserName": "RoLingG",
        "Age":      "23",
    }
    context.JSON(200, userMap) //响应Map。
}
func main() {
    router := gin.Default()
    router.GET("/json", _Json)
    router.Run(":80")
}

④直接响应Json

func _Json(context *gin.Context) {
    //③直接响应json
    context.JSON(200, gin.H{"username": "RoLingG", "age": 23, "messgae": gin.H{}}) //json和xml都可以在属性后面通过gin.H{}让一个属性能继续向下拓展
}
func main() {
    router := gin.Default()
    router.GET("/json", _Json)
    router.Run(":80")
}

3.响应Xml

func _Xml(context *gin.Context) {
    //创建一个结构体
    type UserInfo struct {
        Name     string `xml:"user_name"` //Name、Age这些属性可以用`xml`隐写(换掉)(Golang中Tag的应用)
        Age      int    `xml:"user_age"`
        Password string `xml:"-"` //敏感信息不显示出来可以用`xml:"-"`去进行不渲染,忽略转换xml
    }
    //实例化结构体
    user := UserInfo{
        Name:     "小王",
        Age:      18,
        Password: "123456",
    }
    //用结构体的写法↓
    context.XML(200, user)
    //不用结构体的直接写法↓
    //context.XML(200, gin.H{"user": "RoLingG", "age": "20", "message": "Hey", "status": http.StatusOK, "data": gin.H{"user": "Clouwer"}}) 
    //json和xml都可以在属性后面通过gin.H{}让一个属性能继续向下拓展
    //http.StatusOK ←这个下一章有讲,是http中一个判断传输状态是否成功的方法。
}
func main() {
    router := gin.Default()
    router.GET("/xml", _Xml)
    router.Run(":80")
}

4.响应Yaml(不怎么用)

func _Yaml(context *gin.Context) {
    context.YAML(200, gin.H{"user": "RoLingG", "age": "20", "message": "Hey", "status": http.StatusOK, "data": gin.H{"user": "Clouwer"}}) 
}
func main() {
    router := gin.Default()
    router.GET("/yaml", _Yaml)
    router.Run(":80")
}

5.响应Html

func _Html(context *gin.Context) {
    type UserInfo struct {
        Name     string `json:"user_name"` //Name、Age这些属性可以用json隐写(换掉)
        Age      int    `json:"user_age"`
        Password string `json:"-"` //敏感信息不显示出来可以用`json:"-"`去进行不渲染,忽略转换json
    }
    user := UserInfo{
        Name:     "RoLingG",
        Age:      20,
        Password: "123456",
    }
    context.HTML(200, "index.html", gin.H{"username": "RoLingG"})
    context.HTML(200, "index.html", user)
}
func main() {
    router := gin.Default()
    router.GET("/html", _Html)
    router.Run(":80")
}

6.重定向

//func _Html(context *gin.Context){......}
func _Redirect(context *gin.Context) {
    //第一个参数是重定向的状态码(一个是301,一个是302),第二个参数是响应的网址
    //301和302的区别:301是*永久重定向*,永久的转移到了新位置,用户点击301链接时依旧是访问之前*缓存*过的301地址。而302是*临时重定向*,只要服务器变了,就不会缓存,除非有指定。
    //可针对爬虫
    context.Redirect(301, "http://www.baidu.com")    //用这个方法就可以直接通过本机访问一些网站
    //通过网络test后缀直接访问html后缀
    //context.Redirect(302, "/html")    //也可以响应的网址是前面定义过的响应
}
func main() {
    router := gin.Default()
    //router.GET("/html", _Html)
    router.GET("/test", _Redirect)
    router.Run(":80")
}
PREV
[Golang]Gin框架 1.Hello World
NEXT
[Golang]Gin框架 4.四大请求方式

评论(0)

发布评论