genmain.go 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. package generator
  2. import (
  3. "fmt"
  4. "path/filepath"
  5. "strings"
  6. conf "github.com/zeromicro/go-zero/tools/goctl/config"
  7. "github.com/zeromicro/go-zero/tools/goctl/rpc/parser"
  8. "github.com/zeromicro/go-zero/tools/goctl/util"
  9. "github.com/zeromicro/go-zero/tools/goctl/util/format"
  10. "github.com/zeromicro/go-zero/tools/goctl/util/pathx"
  11. "github.com/zeromicro/go-zero/tools/goctl/util/stringx"
  12. )
  13. const mainTemplate = `package main
  14. import (
  15. "flag"
  16. "fmt"
  17. {{.imports}}
  18. "github.com/zeromicro/go-zero/core/conf"
  19. "github.com/zeromicro/go-zero/core/service"
  20. "github.com/zeromicro/go-zero/zrpc"
  21. "google.golang.org/grpc"
  22. "google.golang.org/grpc/reflection"
  23. )
  24. var configFile = flag.String("f", "etc/{{.serviceName}}.yaml", "the config file")
  25. func main() {
  26. flag.Parse()
  27. var c config.Config
  28. conf.MustLoad(*configFile, &c)
  29. ctx := svc.NewServiceContext(c)
  30. svr := server.New{{.serviceNew}}Server(ctx)
  31. s := zrpc.MustNewServer(c.RpcServerConf, func(grpcServer *grpc.Server) {
  32. {{.pkg}}.Register{{.service}}Server(grpcServer, svr)
  33. if c.Mode == service.DevMode || c.Mode == service.TestMode {
  34. reflection.Register(grpcServer)
  35. }
  36. })
  37. defer s.Stop()
  38. fmt.Printf("Starting rpc server at %s...\n", c.ListenOn)
  39. s.Start()
  40. }
  41. `
  42. // GenMain generates the main file of the rpc service, which is an rpc service program call entry
  43. func (g *DefaultGenerator) GenMain(ctx DirContext, proto parser.Proto, cfg *conf.Config) error {
  44. mainFilename, err := format.FileNamingFormat(cfg.NamingFormat, ctx.GetServiceName().Source())
  45. if err != nil {
  46. return err
  47. }
  48. fileName := filepath.Join(ctx.GetMain().Filename, fmt.Sprintf("%v.go", mainFilename))
  49. imports := make([]string, 0)
  50. pbImport := fmt.Sprintf(`"%v"`, ctx.GetPb().Package)
  51. svcImport := fmt.Sprintf(`"%v"`, ctx.GetSvc().Package)
  52. remoteImport := fmt.Sprintf(`"%v"`, ctx.GetServer().Package)
  53. configImport := fmt.Sprintf(`"%v"`, ctx.GetConfig().Package)
  54. imports = append(imports, configImport, pbImport, remoteImport, svcImport)
  55. text, err := pathx.LoadTemplate(category, mainTemplateFile, mainTemplate)
  56. if err != nil {
  57. return err
  58. }
  59. etcFileName, err := format.FileNamingFormat(cfg.NamingFormat, ctx.GetServiceName().Source())
  60. if err != nil {
  61. return err
  62. }
  63. return util.With("main").GoFmt(true).Parse(text).SaveTo(map[string]interface{}{
  64. "serviceName": etcFileName,
  65. "imports": strings.Join(imports, pathx.NL),
  66. "pkg": proto.PbPackage,
  67. "serviceNew": stringx.From(proto.Service.Name).ToCamel(),
  68. "service": parser.CamelCase(proto.Service.Name),
  69. }, fileName, false)
  70. }