You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
go-grpc_basic/main.go

61 lines
1.2 KiB
Go

package main
import (
"context"
"log"
"net/http"
"os"
"os/signal"
"syscall"
"github.com/ajikamaludin/go-grpc_basic/configs"
"github.com/ajikamaludin/go-grpc_basic/router"
"golang.org/x/sync/errgroup"
)
func main() {
var err error
configs, logger, err := configs.New()
if err != nil {
log.Printf("[SERVER] ERROR %v", err)
log.Fatal(err)
}
logger.Infof("[SERVER] Environment %s is ready", configs.Config.Env)
g, _ := errgroup.WithContext(context.Background())
var servers []*http.Server
g.Go(func() error {
signalChannel := make(chan os.Signal, 1)
signal.Notify(signalChannel, os.Interrupt, syscall.SIGTERM)
select {
case sig := <-signalChannel:
logger.Infof("receive signal: %s\n", sig)
for i, s := range servers {
if err := s.Shutdown(context.Background()); err != nil {
if err == nil {
logger.Infof("error shutting down server %d: %v", i, err)
return err
}
}
}
os.Exit(1)
}
return nil
})
g.Go(func() error { return router.NewGRPCServer(configs, logger) })
g.Go(func() error { return router.NewHTTPServer(configs, logger) })
if err := g.Wait(); !router.IgnoreErr(err) {
log.Printf("[SERVER] ERROR %v", err)
logger.Fatal(err)
}
logger.Infoln("[APP] DONE.")
}