响应处理
数据返回类型
常见的三种响应数据: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")
}
打开网页显示如下:
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")
}
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")
}
响应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"}})
})
响应内容
也可以采用Postman响应
响应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")
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>娇娇</title>
</head>
<body>
响应娇娇!!!
<header>你好呀,{{ .username}}</header>
</body>
</html>
文件响应
在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")
}
目录结构
重定向
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,因为谷歌知道这只是暂时的。因此,你将保留任何排名,流量价值,以及该页面可能拥有的权威。