gin框架是一个基于go语言的轻量级web框架,它具有高效性、灵活性、易扩展性
gin框架使用的是定制版的httprouter
其路由原理是大量使用公共前缀的树结构,注册路由的过程就是构造前缀树的过程。
具有公共前缀的节点也共享一个公共父节点。
 
 
r :=  gin. Default ( ) 
r. GET ( "/hello" ,  func ( c * gin. Context)  { c. JSON ( 200 ,  gin. H{ "message" :  "Hello, world!" } ) 
} ) 
r. POST ( "/login" ,  loginHandler) 
r. Run ( ":8080" )  
r. GET ( "/users/:username" ,  getUsers) 
r. GET ( "/articles/:id([0-9]+)" ,  getArticleByID) 
admin :=  r. Group ( "/admin" ) 
admin. Use ( AuthMiddleware)  
admin. GET ( "/users" ,  listAdminUsers) 
admin. POST ( "/users" ,  createAdminUser) 
r. GET ( "/old-path" ,  func ( c * gin. Context)  { c. Redirect ( http. StatusMovedPermanently,  "/new-path" ) 
} ) 
处理函数接收一个 * gin. Context 参数,该对象包含了请求和响应的所有相关信息, 通常完成以下任务:
-  读取请求数据:通过 c. Query ( ) 、c. PostForm ( ) 、c. ShouldBind ( )  等方法获取查询参数、表单数据或 JSON/ XML 等请求体内容
-  响应数据:使用 c. JSON ( ) 、c. XML ( ) 、c. String ( ) 、c. File ( )  等方法向客户端发送响应
-  中间件:调用 c. Next ( )  传递控制权给下一个中间件或者结束请求
v1 :=  r. Group ( "/api/v1" ,  authMiddleware) 
{ users :=  v1. Group ( "/users" ) { users. GET ( "/:id" ,  getUser) users. POST ( "/" ,  createUser) } articles :=  v1. Group ( "/articles" ) { articles. GET ( "/:id" ,  getArticle) articles. POST ( "/" ,  createArticle) } 
} 
auth :=  r. Group ( "/auth" ,  AuthMiddleware) 
{ auth. GET ( "/login" ,  loginHandler) . Name ( "login" ) auth. POST ( "/logout" ,  logoutHandler) . Name ( "logout" ) 
} 
loginURL :=  r. MustGet ( "login" ) . URL ( )   
中间件常用来实现一些通用的功能,如日志记录、权限校验、数据加工等分为全局中间件和局部中间件两种类型:全局中间件作用于所有路由之前,局部中间件则是作用于某个路由或路由组之前。
1.  c. Next ( ) :  调用该函数会将控制权交给下一个中间件函数,如果没有下一个中间件函数,则将控制权交给处理请求的路由处理函数2.  c. Abort ( ) :  调用该函数会立即终止当前中间件函数的执行,并且不会再调用后续的中间件函数或路由处理函数3.  c. AbortWithStatus ( code int ) :  调用该函数会终止当前中间件函数的执行,并返回指定的HTTP状态码给客户端4.  c. NextWithError ( ) :  调用该函数会将控制权交给下一个中间件函数,同时传递一个错误给下一个中间件函数或路由处理函数5.  c. IsAborted ( ) :  该函数用于判断当前请求是否已经被终止,返回一个布尔值表示请求是否已经被终止
用于处理 HTTP 请求和响应,是通过中间件来传递的
在 Gin 的处理流程中,Context 贯穿整个处理过程,用于传递请求和响应的信息
Bind ( ) 系列函数:根据request的数据类型,将其解析到结构体或map 里
有成员Keys,上游需要传递的变量可以放在里面,下游处理时再从里面取出来,实现上下游参数传递, 对应Set ( ) 和Get ( ) 方法
c. JSON ( ) 
c. String ( ) 
c. HTML ( )