Aaron Li

Blog-App: Gin 建立 mine app

Table of Content

目標

  1. 建立一個最小化可以接收 request 的 server

實作

預計將主要的 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 呢? 有兩個步驟

  1. 定義好 gin 的 engine (可以設定 router, middleware 等等 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)
	}
}
  1. run server 在 gin 者需要 engine.Run(port) 就可以將 api server 給啟動了
func (server *Server) Start(port string) error {
	return server.router.Run(port)
}