菜鸟笔记
提升您的技术认知

gin web 网络框架-ag真人游戏

gin web 网络框架

gin框架介绍

gin是一个golang的微框架,封装比较优雅,api友好,源码注释比较明确,具有快速灵活,容错方便等特点。

gin特点和特性

  • 速度:gin之所以被很多企业和团队所采用,第一个原因是因为其速度快,性能表现出众。基准测试

  • 中间件:和iris类型,gin在处理请求时,支持中间件操作,方便编码处理。

  • 路由:在gin中可以非常简单的实现路由解析的功能,并包含路由组解析功能。

  • 内置渲染:gin支持json、xml和html等多种数据格式的渲染,并提供了方便的操作api。

gin网络请求与路由处理

创建engine

  • engine被定义成代表gin框架的一个结构体。其中包含了路由组、中间件、页面渲染接口、框架配置设置等相关内容。
  • 默认的engine可以通过gin.default进行创建,或者使用gin.new()同样可以创建。router := gin.new()/ router := gin.default()
  • gin.default()和gin.new()的区别在于gin.default也使用gin.new()创建engine实例,但是会默认使用logger和recovery中间件。
  • logger是负责进行打印并输出日志的中间件,方便开发者进行程序调试;recovery中间件的作用是如果程序执行过程中遇到panic中断了服务,则recovery会恢复程序执行,并返回服务器500内部错误。通常情况下,我们使用默认的gin.default创建engine实例。

处理http请求

restful路由通用处理

  • handle():在engine中使用handle方法进行http请求的处理。handle方法包含三个参数,具体如下所示:
    • func (group *routergroup) handle(httpmethod, relativepath string, handlers …handlerfunc) iroutes
    • httpmethod:第一个参数表示要处理的http的请求类型,是get、post、delete等8种请求类型中的一种。
    • relativepath:第二个参数表示要解析的接口,由开发者进行定义。
    • handlers:第三个参数是处理对应的请求的函数。

restful路由分类处理

除了通用方法,engine还可以按类型进行直接解析。engine中包含有get方法、post方法、delete方法等与http请求类型对应的方法。

  • engine.get()处理get请求,
  • engine.post()处理post请求
  • 。。。

gin.context

context是gin框架中封装的一个结构体,这是gin框架中最重要,最基础的一个结构体对象。该结构体可以提供我们操作请求,处理请求,获取数据等相关的操作,通常称之为上下文对象,简单说为我们提供操作环境。

  • context.param 获取请求参数:在路由地址中: 一个参数名组成路由参数。可以使用c.params的方法读取其值。(区分版本:version := c.param(“version”),router.group(“/im/:version”,func)

  • context.query和context.defaultquery获取get请求携带的参数。其中defaultquery提供默认值,getquery返回值之外还包括参数是否存在。

  • http的报文体传输数据常见的格式就有四种。例如application/json,application/x-www-form-urlencoded, application/xml和multipart/form-data。后面一个主要用于图片上传。

  • context.postform获取表单数据:

    • postform从 post url编码表单或multipart表单中返回指定的键,否则返回一个空字符串。
    • 除此之外,还可以使用context.getpostform来获取表单数据。其中context.getpostform除了返回获取到的值之外还会返回数据是否存在的标志。
  • context.bindjson获取post请求中的json数据。

  • context.clientip:clientip实现了一个最大努力的算法来返回真实的客户端ip用于问题定位。

  • context.writer.write向请求发起端返回数据。

  • context.data:将一些数据写入响应体并更新http代码。

  • context.json():json将给定的结构作为json序列化到响应体中。

  • context.fullpath:返回匹配的路由的全路径。对于未找到的路由返回一个空字符串。

请求参数绑定与多数据格式处理

表单实体绑定

如果表单数据较多时,使用postform和getpostform一次获取一个表单数据,开发效率较慢。gin框架提供了数据结构体和表单提交数据绑定的功能,提高表单数据获取的效率。

  • 使用shouldbindquery可以实现get方式的数据请求的绑定。
  • 使用shouldbind可以实现post方式的提交数据的绑定工作。shouldbind会检查content-type来自动选择一个绑定引擎,根据“content-type”头的不同会使用不同的绑定。
  • 当客户端使用json格式进行数据提交时,使用bindjson可以实现对数据进行绑定并自动解析。

多数据格式返回请求结果

  • context.writer.write方法写入[]byte数据。这里的write是http.responsewriter接口定义的。
  • writer是gin框架中封装的一个responsewriter接口类型。此外,responsewriter自身还封装了writestring方法返回数据。
  • 在项目开发中,json格式规范使用的更为普遍。gin框架中的context包含的json方法可以将结构体类型的数据转换成json格式的结构化数据,然后返回给客户端。
    • map[string]interface map类型的数据转换成为json格式并返回给前端
    • 结构体也是可以直接转换为json格式返回给客户端。
    • 除了json格式以外,gin框架还支持返回html格式的数据。可以直接渲染html页面。
  • gin.h封装了生成json的方式,是一个强大的工具。使用golang可以像动态语言一样写字面量的json,对于嵌套json的实现,嵌套gin.h即可。在gin中实际是定义为:type h map[string]interface{}。

使用路由组分类处理请求

在实际的项目开发中,均是模块化开发。同一模块内的功能接口,往往会有相同的接口前缀,因此gin提供了路由组的概念,实现对路由的分类。

  • 路由组是router.group中的一个方法,用于对请求进行分组。

  • grouproute:=engine.group(“/group”)

  • group返回一个routergroup指针对象,而routergroup是gin框架中的一个路由组结构体定义。

      type routergroup struct {
          handlers handlerschain
          basepath string
          engine   *engine
          root     bool
      }
    
网站地图