Gin | 青训营

143 阅读2分钟

Web应用程序(Web Application) 是一种通过网络(通常是互联网)访问的软件应用程序。与传统的桌面应用程序不同,Web应用程序运行在Web浏览器中,并通过与远程服务器的交互来提供功能和服务。用户可以通过在浏览器中输入URL或点击链接来访问Web应用程序。 Gin 是一款基于 Go 语言的轻量级 Web 框架,广受开发者欢迎,因其快速、高效和易用而备受瞩目。

基本概念: Gin 是一个用 Go (Golang) 编写的 Web 框架。 它具有类似 martini 的 API,性能要好得多,多亏了 httprouter,速度提高了 40 倍。 基本概念:

  • 路由和处理器: Gin 使用路由来匹配 URL 请求,然后将请求发送到相应的处理器函数。路由定义了 URL 和处理器函数之间的映射关系,使得请求可以被正确处理。
  • 中间件: Gin 提供了中间件机制,允许开发者在请求处理之前或之后添加额外的逻辑。这对于认证、日志记录、跨域处理等场景非常有用。
  • 上下文(Context): Gin 的上下文对象将请求和响应信息封装在一起,方便在处理器函数中访问这些数据。它还提供了很多有用的方法来操作请求和响应。

特性

快速

基于 Radix 树的路由,小内存占用。没有反射。可预测的 API 性能。

支持中间件

传入的 HTTP 请求可以由一系列中间件和最终操作来处理。 例如:Logger,Authorization,GZIP,最终操作 DB。

Crash 处理

Gin 可以 catch 一个发生在 HTTP 请求中的 panic 并 recover 它。这样,你的服务器将始终可用。例如,你可以向 Sentry 报告这个 panic!

JSON 验证

Gin 可以解析并验证请求的 JSON,例如检查所需值的存在。

路由组

更好地组织路由。是否需要授权,不同的 API 版本…… 此外,这些组可以无限制地嵌套而不会降低性能。

错误管理

Gin 提供了一种方便的方法来收集 HTTP 请求期间发生的所有错误。最终,中间件可以将它们写入日志文件,数据库并通过网络发送。

内置渲染

Gin 为 JSON,XML 和 HTML 渲染提供了易于使用的 API。 Gin使用示例

package main
import "github.com/gin-gonic/gin" 
func main() { 
			router := gin.Default() 
			router.Run(":8080") 
}

这里启动一个8080端口。

func InitCoreRouter() {  
userApi := api.NewUserApi()  
videoApi := api.NewVideoApi()  
messageApi := api.NewMessageApi()  
relationApi := api.NewRelationApi()  
favoriteApi := api.NewFavoriteApi()  
commentApi := api.NewCommentApi()  
RegistRouter(func(rg *gin.RouterGroup) {  
rg.GET("/feed/", videoApi.FeedVideo)  
rg.GET("/user/", userApi.UserInfo)  
userGroup := rg.Group("/user")  
userGroup.POST("/register/", userApi.UserRegister)  
userGroup.POST("/login/", userApi.UserLogin)  
publishGroup := rg.Group("/publish")  
publishGroup.POST("/action/", videoApi.PublishVideo)  
publishGroup.GET("/list/", videoApi.PublishList)  
relationGroup := rg.Group("/relation")  
relationGroup.POST("/action/", relationApi.RelationAction)  
relationGroup.GET("/follow/list/", relationApi.FollowList)  
relationGroup.GET("/follower/list/", relationApi.FollowerList)  
relationGroup.GET("/friend/list/", relationApi.FriendList)  
messageGroup := rg.Group("/message")  
messageGroup.GET("/chat/", messageApi.MessageChat)  
messageGroup.POST("/action/", messageApi.MessageAction)  
favoriteGroup := rg.Group("/favorite")  
favoriteGroup.POST("/action/", favoriteApi.FavoriteAction)  
favoriteGroup.GET("/list/", favoriteApi.GetFavoriteList)  
commentGroup := rg.Group("/comment")  
commentGroup.POST("/action/", commentApi.CommentAction)  
commentGroup.GET("/list/", commentApi.GetCommentList)  
  
})  
}

`` 这个是简单调用。