Day3:gin使用 | 青训营

78 阅读3分钟

导读

本套笔记是为了学习过其他语言框架,想要快速掌握gin框架推行的一套笔记。 虽然为了青训营而制作的一套笔记,但其他想要学go的程序员也可以通过这个上手go世界,后续会带你快速上手gorm,学完这两个之后,简体版抖音基本上就可以独立完成了。

首先,首先新建一个简单入门的后端,监听8080端口


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") //设置运行接口
}

可以看到,和springboot的差别很大。

路由

在 Go 中,路由(Routing)是指将收到的 HTTP 请求映射到相应的处理程序或处理函数的过程。路由确定了请求的路径和方法,并将其分发给正确的处理程序来处理该请求。go中的路由是类似router.get这样的,而springboot中则是使用@Controller和@GetMapping实现。go这样写法有个好处就是可以集中将路由写在一个.go文件中。 类似这样


func InitRouter(r *gin.Engine) {
    r.Static("/static", "./static")
    //apiRouter := r.Group("/douyin")

    r.GET("/douyin/feed/", Base.Feed)
    r.GET("/douyin/publish/list/", Base.PublishList)
    r.GET("/douyin/user/", Base.UserInfo)
    r.POST("/douyin/user/login/", Base.Login)
    r.POST("/douyin/user/register/", Base.Register)
    r.POST("/douyin/publish/action/", Base.UploadVideo)

    r.GET("/douyin/favorite/list/", Interaction.Favorite)
    r.POST("/douyin/favorite/action/", Interaction.Like)
    r.POST("/douyin/comment/action/", Interaction.Conmment)
    r.GET("/douyin/comment/list/", Interaction.CommentList)

    r.POST("/douyin/relation/action/", Socialize.Follow)
    r.GET("/douyin/relation/follow/list/", Socialize.FollowList)
    r.GET("/douyin/relation/follower/list/", Socialize.FanList)
    r.GET("/douyin/relation/friend/list/", Socialize.FriendList)
    r.GET("/douyin/message/chat/", Socialize.MessageList)
    r.POST("/douyin/message/action/", Socialize.AddMessage)
}

自定义响应

响应json

c.JSON(http.StatusOK, gin.H{"Message": "返回成功", "status": "ok"}) 可以将响应内容写入gin.h里面然后返回。

自定义响应状态码

c.JSON(http.StatusOK) http里面可选的返回参数

image.png

从控制器中获取文件

func UploadVideo(c *gin.Context) {
    file, err := c.FormFile("data")
    c.JSON(http.StatusOK)

    }

上面是从控制器中获取Form表单数据

重定向

当客户端访问这个路径之后将会把他自动转到别的路径。

  
import (  
"github.com/gin-gonic/gin" //引入框架  
"net/http"  
)  
  
func main() {  
router := gin.Default() //设置路由  
  
router.GET("/redirect", func(c *gin.Context) {  

//支持内部和外部的重定向  
c.Redirect(http.StatusMovedPermanently, "http://www.biying.com/")  
})  
  

router.Run() //设置运行接口  
}

文件响应

文件响应(File Response)是指在Web开发中,服务器向客户端返回的一个文件作为响应的内容。当客户端发送请求后,服务器可以将一个文件作为响应内容发送给客户端,客户端可以选择保存、下载或直接展示该文件。 一般情况下,文件响应都是写在静态路径上面。

r.Static("/static", "./static")

gin.Static()

第一个参数是所访问资源的URL,第二个参数是资源存放在服务器上的路径,  访问文件资源时指定的url会被映射到服务器上真正存放静态资源的路径上,下面是我项目代码中的使用实例

gin.StaticFS()

先说用法:和gin.Static()一样,第一个参数是请求文件资源的URL,第二个参数是文件系统,可以是http.Dir()gin.Dir()

  • StaticFile注册单个路由以便为本地文件系统的单个文件提供服务
  • StaticFileFS与 StaticFile 一样工作,但可以使用自定义的 http.FileSystem