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项目采用的就是路由分组注册方式,这种方式可以对不同业务区分管理,方便维护。