genmain.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. package generator
  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. "github.com/tal-tech/go-zero/tools/goctl/util/stringx"
  9. )
  10. const mainTemplate = `{{.head}}
  11. package main
  12. import (
  13. "flag"
  14. "fmt"
  15. {{.imports}}
  16. "github.com/tal-tech/go-zero/core/conf"
  17. "github.com/tal-tech/go-zero/zrpc"
  18. "google.golang.org/grpc"
  19. )
  20. var configFile = flag.String("f", "etc/{{.serviceName}}.yaml", "the config file")
  21. func main() {
  22. flag.Parse()
  23. var c config.Config
  24. conf.MustLoad(*configFile, &c)
  25. ctx := svc.NewServiceContext(c)
  26. srv := server.New{{.serviceNew}}Server(ctx)
  27. s := zrpc.MustNewServer(c.RpcServerConf, func(grpcServer *grpc.Server) {
  28. {{.pkg}}.Register{{.service}}Server(grpcServer, srv)
  29. })
  30. defer s.Stop()
  31. fmt.Printf("Starting rpc server at %s...\n", c.ListenOn)
  32. s.Start()
  33. }
  34. `
  35. func (g *defaultGenerator) GenMain(ctx DirContext, proto parser.Proto, namingStyle NamingStyle) error {
  36. dir := ctx.GetMain()
  37. serviceNameLower := formatFilename(ctx.GetMain().Base, namingStyle)
  38. fileName := filepath.Join(dir.Filename, fmt.Sprintf("%v.go", serviceNameLower))
  39. imports := make([]string, 0)
  40. pbImport := fmt.Sprintf(`"%v"`, ctx.GetPb().Package)
  41. svcImport := fmt.Sprintf(`"%v"`, ctx.GetSvc().Package)
  42. remoteImport := fmt.Sprintf(`"%v"`, ctx.GetServer().Package)
  43. configImport := fmt.Sprintf(`"%v"`, ctx.GetConfig().Package)
  44. imports = append(imports, configImport, pbImport, remoteImport, svcImport)
  45. head := util.GetHead(proto.Name)
  46. text, err := util.LoadTemplate(category, mainTemplateFile, mainTemplate)
  47. if err != nil {
  48. return err
  49. }
  50. return util.With("main").GoFmt(true).Parse(text).SaveTo(map[string]interface{}{
  51. "head": head,
  52. "serviceName": strings.ToLower(stringx.From(ctx.GetMain().Base).ToCamel()),
  53. "imports": strings.Join(imports, util.NL),
  54. "pkg": proto.PbPackage,
  55. "serviceNew": stringx.From(proto.Service.Name).ToCamel(),
  56. "service": parser.CamelCase(proto.Service.Name),
  57. }, fileName, false)
  58. }