預計將主要的 api service 寫在 app/pkg/server.go
裡面方便整合其他可能會用到的 service, 這樣我們首先會有一個 main.go
當 api service 的呼叫者, 和 app/pkg/server.go
.
└── app
├── main.go <---------- entry point
└── pkg
└── server <-------- the main service package which integrate other service
我們可以將 api service 定義成
type Server struct { # 其他需要整合的 service } func NewServer() *Server { server := &Server{ #... } return server } func (server *Server) Start(port string) error { # 啟動 api service }
如何啟動一個最簡單的 gin server 呢? 有兩個步驟
將 gin engin 定為 server 的 member, 這樣就可以將定義 router, middleware 的細節給拆在其他 file
# app/pkg/server/server.go type Server struct { router *gin.Engine } func NewServer() *Server { router := gin.Default() server := &Server{ router: router } server.setUpRouter() return server }
# app/pkg/server/router.go func ping(ctx *gin.Context) { ctx.JSON(http.StatusOK, gin.H{"status": "success"}) } func (server *Server) setUpRouter() { public := server.router.Group("") { public.GET("/ping", ping) } }
func (server *Server) Start(port string) error { return server.router.Run(port) }