對於一個項目來說,需要將各個功能模塊分開,也就是所謂的三層模型,這里介紹一下個人的做法:
contorller主要負責路由
model主要負責程序輸入輸出的數據
service主要負責數據處理
utils主要負責存放通用的方法,比如連接數據庫
代碼如下:
project->index.go

package main import ( c "project/controller" "github.com/gin-gonic/gin" ) func main() { r := gin.Default() rr := c.GinRouter(r) // 監聽並在 0.0.0.0:8080 上啟動服務 rr.Run(":8080") }
project->controller->index.go

package controller import ( "fmt" "project/controller/second" "github.com/gin-gonic/gin" ) func GinRouter(r *gin.Engine) *gin.Engine { rr := r.Group("/") rr.GET("/first", func(c *gin.Context) { fmt.Println("first .........") }) rr = r.Group("/a") second.Routers(rr) return r }
project->controller->second->index.go

package second import ( "fmt" ms "project/model/second" ss "project/services/second" "github.com/gin-gonic/gin" ) func Routers(r *gin.RouterGroup) { rr := r.Group("") rr.POST("/second", Function) return } func Function(c *gin.Context) { var input ms.Input if err := c.BindJSON(&input); err != nil { fmt.Println(err) } ss.Function(c, input) return }
project->model->second->index.go

package second type Input struct { Id int `view:"id號" json:"id" from:"id"` }
project->services->second->index.go

package second import ( "fmt" ms "project/model/second" "github.com/gin-gonic/gin" ) func Function(c *gin.Context, input ms.Input) { fmt.Println("second .........,input:", input.Id) return }