package server import ( "github.com/gin-gonic/gin" "github.com/spf13/viper" "log" "net/http" "product/backend/module" "product/backend/module/mw" "time" ) func handlerMain() http.Handler { r := gin.Default() // middle ware mw.SetHandler(r) // handler module.Handler(r) return r } type ServerMain struct { *http.Server } func (s *ServerMain) Start() error { log.Println("server main is listen on", s.Server.Addr) return s.Server.ListenAndServe() } func LoadServerMain() (*ServerMain, error) { s := &http.Server{ Addr: viper.GetString("app.main.addr"), Handler: handlerMain(), ReadTimeout: 5 * time.Second, WriteTimeout: 10 * time.Second, } return &ServerMain{ s, }, nil }