// Start a web server package main import ( "context" "fmt" "interview-one-stop-server/config" "interview-one-stop-server/constant" "interview-one-stop-server/db" "interview-one-stop-server/util" "interview-one-stop-server/util/log" "time" ginzap "github.com/gin-contrib/zap" "github.com/gin-gonic/gin" ) func main() { err := config.InitConfig() if err != nil { panic(err) } r := gin.Default() logger := log.GetLogger() r.Use(ginzap.Ginzap(logger, time.RFC3339, true)) r.Use(ginzap.RecoveryWithZap(logger, true)) r.Use(TraceLog()) err = db.InitDB() if err != nil { log.Error(context.Background(), "InitDB", fmt.Sprintf("db init failed, err is %s", err.Error())) panic("db not ready") } post := GetPostRouter() for k, v := range post { r.POST(k, v) } get := GetGetRouter() for k, v := range get { r.GET(k, v) } r.GET("/ping", Ping) if err := r.Run(fmt.Sprintf(":%s", config.GlobalConf.Service.Port)); err != nil { log.Error(context.Background(), "main", err.Error()) } } func TraceLog() gin.HandlerFunc { return func(c *gin.Context) { c.Set("ctx", context.WithValue(context.Background(), constant.TraceID, util.GenUUID())) } }