Golang框架 - gin实现Http Server

2022-12-07 09:07:56 浏览数 (1)

Golang框架 - gin实现Http Server

最近写golang的时候,有一个实现http server的需求,用golang的框架gin,这里简单总结下使用方法。

01

gin框架介绍

gin框架是利用go开发的一个实现web应用框架,它的开发是基于基础golang工具包net/http的,所以使用起来也比较简单。

对于用户来说,只需要进行3个步骤,就可以实现一个简单的web框架了。分别是引入包、定义http的路由、编写handler函数。

gin框架的下载

github地址:https://github.com/gin-gonic/gin

下载方法:go get -u github.com/gin-gonic/gin

快速上手的案例

代码语言:javascript复制
package main

import (
    "net/http"

    "github.com/gin-gonic/gin"
)

func main() {
    // 启动gin框架,采用默认配置
    router := gin.Default()

    // 编写匿名的handler函数
    router.GET("/test", func(c *gin.Context) {
        c.JSON(http.StatusOK, gin.H{
            "status":  "OK",
            "message": "hello,world",
        })
    })
    router.Run() // listen and serve on 0.0.0.0:8080 (for windows "localhost:8080")
}

上述代码,采用了默认的gin框架,默认端口是8080,生成了简单的路由/test , 并实现了匿名的handler函数,返回一个json结果。

运行代码,此时我们访问本机的8080端口,就能得到如下输出:

这其实就是http server的一个最简单的形态。

02

自定义需求

在实际的应用程序中,端口往往不能采用默认,而且需要配置多个router来响应不同类型的请求,我们可以将代码改写为下面这样:

代码语言:javascript复制
package main

import (
    "github.com/gin-gonic/gin"
)
// 生成4个空的handler函数
func getting(c *gin.Context)  {}
func posting(c *gin.Context)  {}
func putting(c *gin.Context)  {}
func deleting(c *gin.Context) {}

func main() {
    // 启动gin框架,采用默认配置
    router := gin.Default()

    // 不同的url
    router.GET("/someGet", getting)
    router.POST("/somePost", posting)
    router.PUT("/somePut", putting)
    router.DELETE("/someDelete", deleting)
    // 修改端口号为8888
    router.Run(":8888") // listen and serve on 0.0.0.0:8888 (for windows "localhost:8888")
}

上述代码中,router实现了4个路由get、post、put、delete,每个路由有单独的方法,这些方法可以根据实际的应用逻辑进行实现。例子中,还将运行端口改为8888,避免使用默认端口。

除此之外,还可以对我们的http的url进行分组管理,代码如下:

代码语言:javascript复制
func main() {
  router := gin.Default()

  // Simple group: v1
  v1 := router.Group("/v1")
  {
    v1.POST("/login", loginEndpoint)
    v1.POST("/submit", submitEndpoint)
    v1.POST("/read", readEndpoint)
  }

  // Simple group: v2
  v2 := router.Group("/v2")
  {
    v2.POST("/login", loginEndpoint)
    v2.POST("/submit", submitEndpoint)
    v2.POST("/read", readEndpoint)
  }

  router.Run(":8080")
}

不难看出来,上述代码对http的路径进行了分组,根据不同的组进行请求路由。

在gin的框架的说明文档中,还有很多很好的功能,例如:

如何在url中实现变量?

如何让url中支持查询?

如何用url读取文件内容?

如何在url中写入访问日志。

本篇文章作为抛砖引玉,更详细的框架使用,请大家移步github。

https://github.com/gin-gonic/gin

0 人点赞