先从入门例程开始体验一下Gin。
安装Gin
go get github.com/gin-gonic/gin
使用Goland建立工程
接下来需要获取一个Gin实例,还需要给他添加路由,然后就可以启动了。
var startMode = gin.DebugMode
func main() {
fmt.Println("[Server Starting]...")
gin.SetMode(startMode)
//注册路由
router := routers.InitRouter()
//启动服务器
router.Run(":8080")
log.Println("Server stopped")
//defer models.DbClose()
os.Exit(0)
}
我们在InitRouter里面创建一个Gin实例,给他添加路由,在返回给main
func InitRouter() *gin.Engine {
router := gin.Default()
fmt.Println("[Plugin Router Profile]...")
//加载中间件
router.Use(gin.Logger())
//注册顶级路由
v1 := router.Group("/api/v1")
{
new(HellowController).AddRouter(v1)
}
fmt.Println("[Router Inited]...")
return router
}
这里我们创建了一个路由组/api/v1,因为我们项目后面路由会越来越多,这里我们加了个嵌套,在每个模块里面单独在创建一个分组,并添加路由和Handler。
HellowController里面设置分组/hellow,并添加了两个GET路由 /ping 和 /user/:name,
那么完整的路由就是 /api/v1/hellow/ping 和 /api/v1/hellow/user/:name; 这里的/:name表示path变量。
//注册路由
func (h *HellowController)AddRouter(router *gin.RouterGroup) {
r := router.Group("/hellow")
r.GET("/user/:name", h.GetUserHandler)
r.GET("/ping", h.PingHandler)
}
每个路由需要添加对应的Handler处理函数。
var DB = map[string]string{
"aa": "222",
"bb": "444",
}
func (h *HellowController)PingHandler(c *gin.Context) {
c.String(200, "pong")
}
// Get user value
func (h *HellowController)GetUserHandler(c *gin.Context) {
user := c.Params.ByName("name")
value, ok := DB[user]
if ok {
c.JSON(200, gin.H{"user": user, "value": value})
} else {
c.JSON(200, gin.H{"user": user, "status": "no value"})
}
}
收到/api/v1/hellow/ping请求时,服务器直接返回一个“pong”字符串。而收到/user时则会用
c.Params.ByName("name")
取出path变量,返回map里面对应的user信息。
启动服务器后会打印出Handler的信息
[GIN-debug] GET /api/v1/hellow/user/:name --> _/F_/Project/GOproject/WEB/awesomeProject/api/controllers.(*HellowController).GetUserHandler-fm (4 handlers)
[GIN-debug] GET /api/v1/hellow/ping --> _/F_/Project/GOproject/WEB/awesomeProject/api/controllers.(*HellowController).PingHandler-fm (4 handlers)
[GIN-debug] Listening and serving HTTP on :8080
访问/api/v1/hellow/ping,会返回pong
访问http://localhost:8080/api/v1/hellow/user/aa,则会返回map里面的"aa"