1. 简介

gin是用go编写的框架,它将很多功能集合在一起,而gin框架中采用的路由库是基于httprouter做的,可以看gin路由源代码

2. 基本路由

package main

import (
    "net/http"

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

func main() {
    r := gin.Default()
    r.GET("/", func(c *gin.Context) {
        c.String(http.StatusOK, "hello word")
    })

    // 默认情况下监听端口为8080
    r.Run(":8000")
}

127.0.0.1:8000 输出 hello word
r.GET 为get方式访问,此外还有r.Port、r.Put、r.Put、r.Delete 用法同理

3. 路由拆分

在基本路由中我们是把访问后要输出的逻辑直接写在r.GET()里,要是内容多的话就不美观,所以可以进行拆分

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
    "net/http"
)

func main() {
    r := gin.Default()
    r.GET("/", helloHandler)
    if err := r.Run(); err != nil {
        fmt.Println("startup service failed, err:%v\n", err)
    }
}

func helloHandler(c *gin.Context) {
    c.String(http.StatusOK, "hello word")
}

4. 路由分组

简单的实列路由写在一个main文件里是问题不大的,但是当实际项目的业务量大时,能根据项目的业务对路由进行拆分是非常必要的。 而实际工作中,我们也是更倾向于把路由代码拆分出来,放到单独的一个文件里。 main.go文件

package main

import (
    "fmt"
    "github.com/gin-gonic/gin"
    "my-gin/routers"
)

func main() {
    r := gin.Default()

    // 基础常用
    routers.BaseRouter(r)

    if err := r.Run(); err != nil {
        fmt.Println("startup service failed, err:%v\n", err)
    }
}

routers/base.go文件

package routers

import (
    "fmt"
    "github.com/gin-gonic/gin"
    "net/http"
)

// 基础
func BaseRouter(e *gin.Engine) {

    // 使用路由组
    r := e.Group("/base")

    r.GET("/view", url)
}

// 获取URL参数
func url(c *gin.Context) {
    name := c.DefaultQuery("name", "yzx-fjl.cn")
    c.String(http.StatusOK, fmt.Sprintf("hello %s", name))
}

本项目如果已经运行可以直接访问 http://127.0.0.1:8080/base/view

5. 结语

my-gin项目采用的就是路由分组注册方式,这种方式可以对不同业务区分管理,方便维护。

Copyright © yzx该文章修订时间: 2021-09-08 15:05:53

results matching ""

    No results matching ""