package main import ( "flag" "log" "net" "github.com/gin-gonic/gin" "minerva.bing89.com/gateway/pkg/apiserver" grpcv1 "minerva.bing89.com/gateway/pkg/grpc/v1" "minerva.bing89.com/gateway/pkg/minerva" ) var ( address string dburi string persistentEngine string ) func initFlags(){ flag.StringVar(&address, "address", "localhost:8080", "address to listen") flag.StringVar(&dburi, "dburi", "minerva.json", "Persistent destination") flag.StringVar(&persistentEngine, "persistent-engine", "file", "persistent engine, example: file, mysql, etc.") flag.Parse() } //暂时只支持file作为持久化方式, 不处理其他方式 func createPersistentEngine()(minerva.PersistentEngine, error){ fe := minerva.NewPersistentFile(dburi) return fe, nil } func main(){ initFlags() pEngine, err := createPersistentEngine() if err != nil { log.Fatal("create persistent engine failed ", err) } svr, err := grpcv1.NewServer(pEngine) if err != nil { log.Fatal("create grpc server failed ",err) } apiServer := apiserver.NewAPIServer(svr) engine := gin.Default() apiServer.InitRoute(engine) lis, err := net.Listen("tcp", address) if err != nil { log.Fatal("create net listener failed ",err) } defer lis.Close() go svr.StartRPCService(lis) err = engine.RunListener(lis) if err != nil { log.Fatal("start http server failed ", err) } }