这是我参与「第五届青训营 」伴学笔记创作活动的第 3 天
此处主要记录一些项目的结构
1,将路由分开写成不同文件
-
项目结构如下
-
项目代码如下
1.sayHI
package routers
import (
"github.com/gin-gonic/gin"
"net/http"
)
func sayHI(ctx *gin.Context) {
ctx.JSON(http.StatusOK, gin.H{
"msg": "HI",
})
}
func sayHIHI(ctx *gin.Context) {
ctx.JSON(http.StatusOK, gin.H{
"msg": "HIHI",
})
}
// LoadHI 注意使用大写字母开头, LoadHI 将以上函数表达出去类似于nodejs中export,在 **main** 函数中直接将其调用
func LoadHI(engine *gin.Engine) {
engine.GET("/HI", sayHI)
engine.GET("/HIHI", sayHIHI)
}
2.sayHello
package routers
import (
"fmt"
"github.com/gin-gonic/gin"
)
func sayHello(ctx *gin.Context) {
ctx.String(200, fmt.Sprintln("Hello"))
}
// LoadHello 与 sayHI 中一样
func LoadHello(engine *gin.Engine) {
engine.GET("/Hello", sayHello)
}
3.main2.go(主函数)
package main
import (
"Gin2/routers"
"fmt"
"github.com/gin-gonic/gin"
)
func main() {
route := gin.Default()
routers.LoadHello(route)
routers.LoadHI(route)
err := route.Run(":80")
if err != nil {
fmt.Println("ERROR")
return
}
}
2.当项目实在太大时
有时候项目规模实在太大,那么我们就更倾向于把业务拆分的更详细一些,例如把不同的业务代码拆分成不同的APP。
此时,项目结构如下:
请忽略马赛克,只需要其他几个便可
- app下存放不同路由,其他文件存放func函数;router文件用于将其定义相关信息,我理解为与nodejs一样负责导出
- routers/routers文件中编写一个include方法一个init方法
sayBye.go
package sayGoodBye
import (
"github.com/gin-gonic/gin"
"net/http"
)
func sayBye(ctx *gin.Context) {
ctx.JSON(http.StatusOK, gin.H{
"msg": "Bye",
})
}
func sayByeBye(ctx *gin.Context) {
ctx.JSON(http.StatusOK, gin.H{
"msg": "ByeBye",
})
}
sayGoodBye/router.go
package sayGoodBye
import "github.com/gin-gonic/gin"
func Routers(e *gin.Engine) {
e.GET("/BY", sayBye)
e.GET("/BYBY", sayByeBye)
}
routers/routers.go
package routers
import "github.com/gin-gonic/gin"
// Option 自定义类型
type Option func(engine *gin.Engine)
var ops []Option
// Include 将所有路由添加进ops切片里面
func Include(opts ...Option) {
ops = append(ops, opts...)
}
// Init 初始化 返回指针赋值给main函数的路由
func Init() *gin.Engine {
r := gin.New()
//运用for方法遍历,其实此处每个opt都是一个router,
for _, opt := range ops {
opt(r)
}
return r
}
main函数如下
package main
import (
"Gin2/app/sayGoodBye"
"Gin2/app/sayHI"
"Gin2/routers"
"fmt"
)
func main() {
routers.Include(sayGoodBye.Routers, sayHI.Routers)
r := routers.Init()
err := r.Run(":80")
if err != nil {
fmt.Println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>")
fmt.Printf("Error: %t\n", err)
return
}
//fmt.Println("SUCCESS")
}
剩下一个sayHI路由一样,省略不写。。。
本作者作为初学者,如有错误理解有误,欢迎指正,不胜感激!