因为这一章内容比较直观,所以直接上代码+注释实现后看一下就懂了。
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")
}
评论(0)