第六届字节跳动青训营——Gin框架学习实践之路第一节 | 青训营

82 阅读3分钟

内容概述

接下来,会记录Gin框架的学习实践之路。Gin框架是Golang的Web框架,非常成熟且受到广泛使用,生态好,各种资源,文件,解答等都可以在网上搜索得到,非常适合初学者学习。这里推荐fengfeng大佬,他有很细致的视频讲解,我也是跟着他后面的。字节的宏观讲解开拓视野加上fengfeng的微观讲解熟练技巧,让你得心应手。此外学习的时候,最好下载一下POSTMAN,随时测试自己的代码是否正确,像POST请求就必须用到。

主要内容

一个简单的测试样例入门

router:=gin.Default():这是默认的服务器。使用gin的Default方法创建一个路由Handler; 然后通过Http方法绑定路由规则和路由函数。不同于net/http库的路由函数,gin进行了封装,把requestresponse都封装到了gin.Context的上下文环境中。 最后启动路由的Run方法监听端口。还可以用http.ListenAndServe(":8080", router),或者自定义Http服务器配置。运行之后,在网址页面就可看到Hello World

package main

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

func main() {
    router := gin.Default()
    router.GET("/", func(c *gin.Context) {
        c.String(http.StatusOK, "Hello World")
    })
    router.Run(":8000") 
}

几种响应请求

首先200 表示正常响应 http.StatusOK

字符串响应请求

字符串类型的很简单,直接一行代码,和上文的样例一样。router.GET("/txt", func(c *gin.Context) { c.String(http.StatusOK, "返回txt") })

json,xml,yaml响应请求

这三种相应请求稍稍复杂些,需要通过结构体的方式,将Go语言的结构体序列化为JSON格式的数据,并返回客户端。以结构体转json为例

router.GET("/json", func(c *gin.Context) {
  c.JSON(http.StatusOK, gin.H{"message": "hey", "status": http.StatusOK})
})
// 结构体转json
router.GET("/moreJSON", func(c *gin.Context) {
  // You also can use a struct
  type Msg struct {
    Name    string `json:"user"`
    Message string
    Number  int
  }
  msg := Msg{"zhouzhou", "hey", 123}
  // 注意 msg.Name 变成了 "user" 字段
  // 以下方式都会输出 :   {"user": "zhouzhou", "Message": "hey", "Number": 123}
  c.JSON(http.StatusOK, msg)
})

xml类似router.GET("/xml", func(c *gin.Context) { c.XML(http.StatusOK, gin.H{"user": "hanru", "message": "hey", "status": http.StatusOK}) }) yaml也是router.GET("/yaml", func(c *gin.Context) { c.YAML(http.StatusOK, gin.H{"user": "hanru", "message": "hey", "status": http.StatusOK}) })

html响应请求

html类型是最复杂的,先要使用 LoadHTMLGlob()或者LoadHTMLFiles()方法来加载模板文件,比如router.LoadHTMLGlob("gin框架/templates/*"),然后定义路由router.GET("/tem", func(c *gin.Context) {c.HTML(http.StatusOK, "index.html", gin.H{ "title": "Main website", }) })

文件响应

在golang中,没有相对文件的路径,它只有相对项目的路径。配置单个文件如下router.StaticFile("/titian.png", "static/titian.png"),其中第一个参数是网页请求的路由,第二个参数是文件的路径。

重定向

重定向顾名思义,简单理解为将你的路由网址转移到其它网址,相当于套了层外壳,看似是A点击之后,却转到B。Gin支持内部和外部的重定向。router.GET("/redirect", func(c *gin.Context) {c.Redirect(http.StatusMovedPermanently, "http://www.baidu.com/") })

301 Moved Permanently

被请求的资源已永久移动到新位置,并且将来任何对此资源的引用都应该使用本响应返回的若干个 URI 之一。如果可能,拥有链接编辑功能的客户端应当自动把请求的地址修改为从服务器反馈回来的地址。除非额外指定,否则这个响应也是可缓存的。

302 Found

请求的资源现在临时从不同的 URI 响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。

内容总结

本文以一个简单的样例演示Gin框架的Web请求时是如何的简单,封装的如此优越。然后介绍了如何处理几种响应请求,重定向,以及状态码301和302。