mono.go 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  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/util"
  9. "github.com/zeromicro/go-zero/tools/goctl/util/pathx"
  10. )
  11. var (
  12. //go:embed idl/greet.api
  13. apiContent string
  14. //go:embed idl/svc.tpl
  15. svcContent string
  16. //go:embed idl/apilogic.tpl
  17. apiLogicContent string
  18. //go:embed idl/api.yaml
  19. apiEtcContent string
  20. apiWorkDir string
  21. )
  22. func initAPIFlags() error {
  23. apiWorkDir = filepath.Join(projectDir, "api")
  24. if err := pathx.MkdirIfNotExist(apiWorkDir); err != nil {
  25. return err
  26. }
  27. apiFilename := filepath.Join(apiWorkDir, "greet.api")
  28. apiBytes := []byte(apiContent)
  29. if err := ioutil.WriteFile(apiFilename, apiBytes, 0666); err != nil {
  30. return err
  31. }
  32. gogen.VarStringDir = apiWorkDir
  33. gogen.VarStringAPI = apiFilename
  34. return nil
  35. }
  36. type mono struct {
  37. callRPC bool
  38. }
  39. func newMonoService(callRPC bool) mono {
  40. m := mono{callRPC}
  41. m.createAPIProject()
  42. return m
  43. }
  44. func (m mono) createAPIProject() {
  45. logx.Must(initAPIFlags())
  46. log.Debug(">> Generating quickstart api project...")
  47. logx.Must(gogen.GoCommand(nil, nil))
  48. etcFile := filepath.Join(apiWorkDir, "etc", "greet.yaml")
  49. logx.Must(ioutil.WriteFile(etcFile, []byte(apiEtcContent), 0666))
  50. logicFile := filepath.Join(apiWorkDir, "internal", "logic", "pinglogic.go")
  51. logx.Must(util.With("logic").Parse(apiLogicContent).SaveTo(map[string]bool{
  52. "callRPC": m.callRPC,
  53. }, logicFile, true))
  54. if m.callRPC {
  55. svcFile := filepath.Join(apiWorkDir, "internal", "svc", "servicecontext.go")
  56. logx.Must(ioutil.WriteFile(svcFile, []byte(svcContent), 0666))
  57. }
  58. }
  59. func (m mono) start() {
  60. if !m.callRPC {
  61. goModTidy(projectDir)
  62. }
  63. log.Debug(">> Ready to start an api server...")
  64. log.Debug(">> Try to execute 'curl --request POST http://127.0.0.1:8888/ping' after service startup...")
  65. goStart(apiWorkDir)
  66. }