Gin快速入门:响应处理 | 青训营

66 阅读4分钟

响应处理

数据返回类型

常见的三种响应数据:JSON、XML、YAML 最常用的还是JSON

响应json的数据

1.结构体形式

package main

import (
	"github.com/gin-gonic/gin"
	"net/http"
)
// 响应json数据格式
func _json(c *gin.Context) {
	//响应的json的结构体
	type UserInfo struct {
        // 注意后面的显示要用`而不是'
		UserName string `json:"prop1"`
		Age      int    `json:"age"`
		//`json:"-"`在页面中显示会隐藏
		Password string `json:"-"`
	}
	user := UserInfo{"uuuuu", 21, "123456"}

	c.JSON(http.StatusOK, user)
}

func main() {

	r := gin.Default()

	r.GET("/demo", _json)

	r.Run(":8080")
}

打开网页显示如下:

image.png

2.也可以用json响应map

package main

import (
	"github.com/gin-gonic/gin"
	"net/http"
)
// 响应json数据格式
func _json(c *gin.Context) {
	userMap := map[string]string{
		"prop1": "uuuuu",
		"age":   "23",
	}
	c.JSON(http.StatusOK, userMap)
}

func main() {

	r := gin.Default()

	r.GET("/demo", _json)

	r.Run(":8080")
}

image.png

3.直接响应

package main

import (
	"github.com/gin-gonic/gin"
	"net/http"
)
// 响应json数据格式
func _json(c *gin.Context) {
	c.JSON(http.StatusOK, gin.H{"prop1": "uuuuu", "age": 23})
}

func main() {

	r := gin.Default()

	r.GET("/demo", _json)

	r.Run(":8080")
}

image.png

响应XML

响应YAML

// 2.XML
r.GET("/someXML", func(c *gin.Context) {
    c.XML(200, gin.H{"message": "abc","data":gin.H{"user":"uuuuu"}})
})
// 3.YAML
r.GET("/someYAML", func(c *gin.Context) {
    c.YAML(200, gin.H{"name": "zhangsan","data":gin.H{"user":"uuuuu"}})
})

响应内容

image.png

也可以采用Postman响应

image.png

响应HTML

package main

import (
	"github.com/gin-gonic/gin"
	"net/http"
)
func _html(c *gin.Context) {
	//响应,第一个为状态码,第二个为html的名字,第三个为可以插入html页面数据
	c.HTML(http.StatusOK, "index.html", gin.H{"username": "娇娇"})
}
func main() {

	r := gin.Default()
	//加载模板目录
	r.LoadHTMLGlob("temp/*")
	
	r.GET("/someHTML", _html)
	r.Run(":8080")
}

image.png

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8">
    <title>娇娇</title>
  </head>
  <body>
    响应娇娇!!!
    <header>你好呀,{{ .username}}</header>
  </body>
</html>

image.png

文件响应

在goland中没有相对文件,只有相对项目路径,相对于你创建的这个文件夹的文件路径,下图就相当于demo1的根目录

filepath的路径就相当于在demo1的相对位置

前面的relativePath是浏览器访问的路径

看错误就找panic

package main

import (
	"github.com/gin-gonic/gin"
	"net/http"
)
func main() {

	r := gin.Default()
 //将"/static/blue"路径映射到了"static/blue"文件,即当用户访问"/static/blue"时,服务器将返回"static/blue"文件的内容作为响应。
	//可以下载某一个文件,注意前缀不可重复
	r.StaticFile("/static/blue", "static/blue.jpg")
	//用于在目录下有不可查看文件的,不可以访问到Pwd.txt,但可以访问到sq.txt
	r.StaticFS("/green", http.Dir("static/static/"))
 r.Run(":8080")
}

image.png

image.png

目录结构

重定向

package main

import (
	"github.com/gin-gonic/gin"
	"net/http"
)
func _redirect(c *gin.Context) {
	//响应,第一个为状态码,第二个为html的名字,第三个为可以插入html页面数据
	c.Redirect(http.StatusMovedPermanently, "https://www.baidu.com")
}
func main() {

	r := gin.Default()
  r.GET("/someRedirect", _redirect)
	r.Run(":8080")
}

重定向有301和302两种

301和302都是http请求重定向状态码,301重定向会向搜索引擎发送网站或者页面被永久转移((Permanently Moved))的消息令网址发生改变而其他的不变。如果你想改变你网站的域名或者或者网址,一定要确保正确正确使用301或者302重定向。

什么时候使用301重定向?

1.更换网站域名。比如,你需要将网站域名由旧域名old.com更换为新域名new.com,这时你就需要使用301重定向。

301重定向会告诉谷歌,你更换了网站域名,请谷歌把旧域名的相关排名转移到新的网站域名。

2.网址(URL)发生改变。网站运行过程中,我们可能会对网站进行改版,包括网站目录的调整,页面的调整,或者网址域名后缀的调整等等。这些情况下,我们就需要把之前的网址A使用301重定向永久转移到网址B。

3.HTTP跳转到HTTPS。网站前期使用的是HTTP,为了不被谷歌标记为不安全网站,我们需要将网站添加HTTPS,并将HTTP网站跳转到HTTPS网站。

4.默认网站是否带WWW。网站管理员可以根据自身需要默认网站设置为带“www.yourwebsite.com” 或者 “yourwebsite.com”.

当然,还有一些其他情况,但只要是永久性的转移,我们就需要使用301重定向。

什么是302重定向?

302重定向让搜索引擎知道一个网站或页面已经被临时移动Temporarily Moved )

什么时候使用302重定向?

302重定向使用的情况不太常见,因为这是个临时性的跳转,暂时性的把页面A跳转到页面B,但是最终还会使用页面A,这个情况一般就是网站短时间内进行改版,在不影响用户体验的情况下,临时把页面跳转到临时页面。

原则上使用302跳转是在告诉谷歌蜘蛛网站页面只是暂时跳转,不要传递权重,也不要收录。

两种重定向对SEO的影响

301和301最大的区别就是一个是永久性移动,一个是临时移动。

当你使用301重定向时,谷歌将从其索引中删除旧页面,并将该页中的大部分值(链接权益)转移到新页面。

当您选择使用302重定向时,原始页面在谷歌中保持索引,并且没有值(链接资产)被转移到新的URL,因为谷歌知道这只是暂时的。因此,你将保留任何排名,流量价值,以及该页面可能拥有的权威。