genmain.go 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  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. )
  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 := server.New{{.service}}Server(ctx)
  26. s := zrpc.MustNewServer(c.RpcServerConf, func(grpcServer *grpc.Server) {
  27. {{.pkg}}.Register{{.service}}Server(grpcServer, srv)
  28. })
  29. defer s.Stop()
  30. fmt.Printf("Starting rpc server at %s...\n", c.ListenOn)
  31. s.Start()
  32. }
  33. `
  34. func (g *defaultGenerator) GenMain(ctx DirContext, proto parser.Proto) error {
  35. dir := ctx.GetMain()
  36. serviceNameLower := formatFilename(ctx.GetMain().Base)
  37. fileName := filepath.Join(dir.Filename, fmt.Sprintf("%v.go", serviceNameLower))
  38. imports := make([]string, 0)
  39. pbImport := fmt.Sprintf(`"%v"`, ctx.GetPb().Package)
  40. svcImport := fmt.Sprintf(`"%v"`, ctx.GetSvc().Package)
  41. remoteImport := fmt.Sprintf(`"%v"`, ctx.GetServer().Package)
  42. configImport := fmt.Sprintf(`"%v"`, ctx.GetConfig().Package)
  43. imports = append(imports, configImport, pbImport, remoteImport, svcImport)
  44. head := util.GetHead(proto.Name)
  45. text, err := util.LoadTemplate(category, mainTemplateFile, mainTemplate)
  46. if err != nil {
  47. return err
  48. }
  49. return util.With("main").GoFmt(true).Parse(text).SaveTo(map[string]interface{}{
  50. "head": head,
  51. "serviceName": serviceNameLower,
  52. "imports": strings.Join(imports, util.NL),
  53. "pkg": proto.PbPackage,
  54. "service": parser.CamelCase(proto.Service.Name),
  55. }, fileName, false)
  56. }