需求:提供10个接口hello1-hello5,world1-world5,返回不同的提示语,即业务函数各自实现一个接口
关键词:【gin 路由分组】
实现:(代码部分去除动态配置端口,有个别涉及到没删掉的地方请对照上一篇代码)
/main.go
// main.go
package main
import (
"fmt"
"gin/src/data"
"gin/src/dynamic_config"
"gin/src/route"
"github.com/gin-gonic/gin"
)
func main() {
gin.SetMode(gin.ReleaseMode)
//动态配置端口
host := dynamic_config.GlobalConfig.GetString("service.redis.host")
port := dynamic_config.GlobalConfig.GetString("service.redis.port")
Way := host + ":" + port
fmt.Println(Way)
R := gin.Default()
route.Route(R)
R.Run(Way)
}
/src/route/router.go
package route
import (
"gin/src/handler"
"github.com/gin-gonic/gin"
)
func Route(R *gin.Engine) {
rGroup := R.Group("/h")
{
rGroup.GET("/hello1", handler.RHello1)
rGroup.GET("/hello2", handler.RHello2)
rGroup.GET("/hello3", handler.RHello3)
rGroup.GET("/hello4", handler.RHello4)
rGroup.GET("/hello5", handler.RHello5)
rGroup.GET("/world1", handler.RWorld1)
rGroup.GET("/world2", handler.RWorld2)
rGroup.GET("/world3", handler.RWorld3)
rGroup.GET("/world4", handler.RWorld4)
rGroup.GET("/world5", handler.RWorld5)
}
}
/src/handler/hello_module.go
package handler
import (
"github.com/gin-gonic/gin"
)
var Mes string
func RHello1(c *gin.Context) {
Mes = "/Hello1"
Response(c, Mes)
//或者直接response传参,不用Mes
//Response(c, "/Hello1")
}
func RHello2(c *gin.Context) {
Mes = "/Hello2"
Response(c, Mes)
}
func RHello3(c *gin.Context) {
Mes = "/Hello3"
Response(c, Mes)
}
func RHello4(c *gin.Context) {
Mes = "/Hello4"
Response(c, Mes)
}
func RHello5(c *gin.Context) {
Mes = "/Hello5"
Response(c, Mes)
}
/src/handler/world_module.go
package handler
import (
"github.com/gin-gonic/gin"
)
func RWorld1(c *gin.Context) {
Response(c, "World1")
}
func RWorld2(c *gin.Context) {
Response(c, "World2")
}
func RWorld3(c *gin.Context) {
Response(c, "World3")
}
func RWorld4(c *gin.Context) {
Response(c, "World4")
}
func RWorld5(c *gin.Context) {
Response(c, "World5")
}
/src/handler/response.go
package handler
import (
"fmt"
"net/http"
"github.com/gin-gonic/gin"
)
func Response(c *gin.Context, mes string) {
fmt.Print(mes)
c.JSON(http.StatusOK, gin.H{
"message": mes,
})
}
写个备忘:
直接实现路由分组其实很简单,对照参考文档即可实现初步的需求。但是代码冗余度过高,不简洁,所以进行下一步的封装。
简单的项目架构目录:在go的概念里,一个文件夹就是一个包package
router是一个模块,外部请求的所有的接口都由这里分发;
response是另一个模块,回复外部所有的接口都由这里出去
根据这个目录做一些函数之间的调用,包之间的引用。
还有一个小tip:引用自定义的包或函数
需要注意的问题:GO中如果函数名或变量的首字母大写,表示该函数\变量是公有的,可以被其他程序调用,如果首字母小写,该函数\变量就是私有的。所以和之前用Java的不同(Java大小写不敏感),如果想要被调用,则首字母大写。