genmain.go 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. package gen
  2. import (
  3. "fmt"
  4. "path/filepath"
  5. "strings"
  6. "github.com/tal-tech/go-zero/tools/goctl/rpc/parser"
  7. "github.com/tal-tech/go-zero/tools/goctl/util"
  8. )
  9. const mainTemplate = `{{.head}}
  10. package main
  11. import (
  12. "flag"
  13. "fmt"
  14. {{.imports}}
  15. "github.com/tal-tech/go-zero/core/conf"
  16. "github.com/tal-tech/go-zero/zrpc"
  17. "google.golang.org/grpc"
  18. )
  19. var configFile = flag.String("f", "etc/{{.serviceName}}.yaml", "the config file")
  20. func main() {
  21. flag.Parse()
  22. var c config.Config
  23. conf.MustLoad(*configFile, &c)
  24. ctx := svc.NewServiceContext(c)
  25. {{.srv}}
  26. s := zrpc.MustNewServer(c.RpcServerConf, func(grpcServer *grpc.Server) {
  27. {{.registers}}
  28. })
  29. defer s.Stop()
  30. fmt.Printf("Starting rpc server at %s...\n", c.ListenOn)
  31. s.Start()
  32. }
  33. `
  34. func (g *defaultRpcGenerator) genMain() error {
  35. mainPath := g.dirM[dirTarget]
  36. file := g.ast
  37. pkg := file.Package
  38. fileName := filepath.Join(mainPath, fmt.Sprintf("%v.go", g.Ctx.ServiceName.Lower()))
  39. imports := make([]string, 0)
  40. pbImport := fmt.Sprintf(`%v "%v"`, pkg, g.mustGetPackage(dirPb))
  41. svcImport := fmt.Sprintf(`"%v"`, g.mustGetPackage(dirSvc))
  42. remoteImport := fmt.Sprintf(`"%v"`, g.mustGetPackage(dirServer))
  43. configImport := fmt.Sprintf(`"%v"`, g.mustGetPackage(dirConfig))
  44. imports = append(imports, configImport, pbImport, remoteImport, svcImport)
  45. srv, registers := g.genServer(pkg, file.Service)
  46. head := util.GetHead(g.Ctx.ProtoSource)
  47. text, err := util.LoadTemplate(category, mainTemplateFile, mainTemplate)
  48. if err != nil {
  49. return err
  50. }
  51. return util.With("main").GoFmt(true).Parse(text).SaveTo(map[string]interface{}{
  52. "head": head,
  53. "package": pkg,
  54. "serviceName": g.Ctx.ServiceName.Lower(),
  55. "srv": srv,
  56. "registers": registers,
  57. "imports": strings.Join(imports, util.NL),
  58. }, fileName, false)
  59. }
  60. func (g *defaultRpcGenerator) genServer(pkg string, list []*parser.RpcService) (string, string) {
  61. list1 := make([]string, 0)
  62. list2 := make([]string, 0)
  63. for _, item := range list {
  64. name := item.Name.UnTitle()
  65. list1 = append(list1, fmt.Sprintf("%sSrv := server.New%sServer(ctx)", name, item.Name.Title()))
  66. list2 = append(list2, fmt.Sprintf("%s.Register%sServer(grpcServer, %sSrv)", pkg, item.Name.Title(), name))
  67. }
  68. return strings.Join(list1, util.NL), strings.Join(list2, util.NL)
  69. }