mono.go 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. package quickstart
  2. import (
  3. _ "embed"
  4. "io/ioutil"
  5. "path/filepath"
  6. "github.com/zeromicro/go-zero/core/logx"
  7. "github.com/zeromicro/go-zero/tools/goctl/api/gogen"
  8. "github.com/zeromicro/go-zero/tools/goctl/pkg/golang"
  9. "github.com/zeromicro/go-zero/tools/goctl/util"
  10. "github.com/zeromicro/go-zero/tools/goctl/util/pathx"
  11. )
  12. var (
  13. //go:embed idl/greet.api
  14. apiContent string
  15. //go:embed idl/svc.tpl
  16. svcContent string
  17. //go:embed idl/apilogic.tpl
  18. apiLogicContent string
  19. //go:embed idl/api.yaml
  20. apiEtcContent string
  21. apiWorkDir string
  22. rpcWorkDir string
  23. )
  24. func initAPIFlags() error {
  25. rpcWorkDir = filepath.Join(projectDir, "rpc")
  26. apiWorkDir = filepath.Join(projectDir, "api")
  27. if err := pathx.MkdirIfNotExist(apiWorkDir); err != nil {
  28. return err
  29. }
  30. apiFilename := filepath.Join(apiWorkDir, "greet.api")
  31. apiBytes := []byte(apiContent)
  32. if err := ioutil.WriteFile(apiFilename, apiBytes, 0o666); err != nil {
  33. return err
  34. }
  35. gogen.VarStringDir = apiWorkDir
  36. gogen.VarStringAPI = apiFilename
  37. return nil
  38. }
  39. type mono struct {
  40. callRPC bool
  41. }
  42. func newMonoService(callRPC bool) mono {
  43. m := mono{callRPC}
  44. m.createAPIProject()
  45. return m
  46. }
  47. func (m mono) createAPIProject() {
  48. logx.Must(initAPIFlags())
  49. log.Debug(">> Generating quickstart api project...")
  50. logx.Must(gogen.GoCommand(nil, nil))
  51. etcFile := filepath.Join(apiWorkDir, "etc", "greet.yaml")
  52. logx.Must(ioutil.WriteFile(etcFile, []byte(apiEtcContent), 0o666))
  53. logicFile := filepath.Join(apiWorkDir, "internal", "logic", "pinglogic.go")
  54. svcFile := filepath.Join(apiWorkDir, "internal", "svc", "servicecontext.go")
  55. configPath := filepath.Join(apiWorkDir, "internal", "config")
  56. svcPath := filepath.Join(apiWorkDir, "internal", "svc")
  57. typesPath := filepath.Join(apiWorkDir, "internal", "types")
  58. svcPkg, err := golang.GetParentPackage(svcPath)
  59. logx.Must(err)
  60. typesPkg, err := golang.GetParentPackage(typesPath)
  61. logx.Must(err)
  62. configPkg, err := golang.GetParentPackage(configPath)
  63. logx.Must(err)
  64. var rpcClientPkg string
  65. if m.callRPC {
  66. rpcClientPath := filepath.Join(rpcWorkDir, "greet")
  67. rpcClientPkg, err = golang.GetParentPackage(rpcClientPath)
  68. logx.Must(err)
  69. }
  70. logx.Must(util.With("logic").Parse(apiLogicContent).SaveTo(map[string]interface{}{
  71. "svcPkg": svcPkg,
  72. "typesPkg": typesPkg,
  73. "rpcClientPkg": rpcClientPkg,
  74. "callRPC": m.callRPC,
  75. }, logicFile, true))
  76. logx.Must(util.With("svc").Parse(svcContent).SaveTo(map[string]interface{}{
  77. "rpcClientPkg": rpcClientPkg,
  78. "configPkg": configPkg,
  79. "callRPC": m.callRPC,
  80. }, svcFile, true))
  81. }
  82. func (m mono) start() {
  83. if !m.callRPC {
  84. goModTidy(projectDir)
  85. }
  86. log.Debug(">> Ready to start an API server...")
  87. log.Debug(">> Run 'curl http://127.0.0.1:8888/ping' after service startup...")
  88. goStart(apiWorkDir)
  89. }