1 创建Engine

在gin框架中,Engine被定义成为一个结构体,Engine代表gin框架的一个结构体定义,其中包含了路由组、中间件、页面渲染接口、框架配置设置等相关内容。默认的Engine可以通过gin.Default进行创建,或者使用gin.New()同样可以创建。两种方式如下所示:

  1. engine1 = gin.Default()
  2. engine2 = gin.New()

gin.Default()和gin.New()的区别在于gin.Default()也使用gin.New()创建engine实例,但是会默认使用Logger和Recovery中间件。

  • Logger是负责进行打印并输出日志的中间件,方便开发者进行程序调试;
  • Recovery中间件的作用是如果程序执行过程中遇到panic中断了服务,则Recovery会恢复程序执行,并返回服务器500内部错误。

通常情况下,我们使用默认的gin.Default创建Engine实例。

2 处理HTTP请求

在创建的engine实例中,包含很多方法可以直接处理不同类型的HTTP请求。
http协议中一共定义了八种方法或者称之为类型来表明对请求网络资源(Request-URI)的不同的操作方式,分别是:OPTIONS、HEAD、GET、POST、PUT、DELETE、TRACE、CONNECT。
虽然一共有八种请求操作类型,但是实际开发中常用的就:GET、POST、DELETE等几种。

(1) 通用处理

engine中可以直接进行HTTP请求的处理,在engine中使用Handle方法进行http请求的处理。Handle方法包含三个参数,具体如下所示:

  1. func (group *RouterGroup) Handle(
  2. httpMethod, // 第一个参数表示要处理的HTTP的请求类型,是GET、POST、DELETE等8种请求类型中的一种。
  3. relativePath string, // 第二个参数表示要解析的接口,由开发者进行定义。
  4. handlers ...HandlerFunc // 第三个参数是处理对应的请求的代码的定义。
  5. ) IRoutes

示例:

  1. engine.Handle("GET", "/hello", func(context *gin.Context) {
  2. //获取请求接口
  3. fmt.Println(context.FullPath())
  4. //获取字符串参数
  5. name := context.DefaultQuery("name", "")
  6. fmt.Println(name)
  7. //输出
  8. context.Writer.Write([]byte("Hello ," + name))
  9. })

(2) Handle处理GET请求

  1. engine.GET("/hello", func(context *gin.Context) {
  2. fmt.Println(context.FullPath())
  3. username := context.Query("name")
  4. fmt.Println(username)
  5. context.Writer.Write([]byte("Hello," + username))
  6. })

通过Handle方法第一个参数指定处理GET类型的请求,解析的接口是/hello。
Context是gin框架中封装的一个结构体,这是gin框架中最重要,最基础的一个结构体对象。该结构体可以提供我们操作请求,处理请求,获取数据等相关的操作,通常称之为上下文对象,简单说为我们提供操作环境。
可以通过context.Query和context.DefaultQuery获取GET请求携带的参数。
可以通过context.Writer.Write向请求发起端返回数据。

(3) Handle处理POST请求

  1. engine.POST("/login", func(context *gin.Context) {
  2. fmt.Println(context.FullPath())
  3. username := context.PostForm("username")
  4. fmt.Println(username)
  5. //passWord
  6. password := context.PostForm("pwd")
  7. fmt.Println(password)
  8. context.Writer.Write([]byte("User login"))
  9. })

POST请求是以form表单的方式提交数据的,可以通过context.PostForm获取表单中提交的数据字段。