newservice.go 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. package new
  2. import (
  3. "os"
  4. "path/filepath"
  5. "text/template"
  6. "github.com/tal-tech/go-zero/tools/goctl/api/gogen"
  7. "github.com/tal-tech/go-zero/tools/goctl/util"
  8. "github.com/urfave/cli"
  9. )
  10. const apiTemplate = `
  11. type Request struct {
  12. Name string ` + "`" + `path:"name,options=you|me"` + "`" + ` // 框架自动验证请求参数是否合法
  13. }
  14. type Response struct {
  15. Message string ` + "`" + `json:"message"` + "`" + `
  16. }
  17. service {{.name}}-api {
  18. @handler GreetHandler
  19. get /greet/from/:name(Request) returns (Response);
  20. }
  21. `
  22. func NewService(c *cli.Context) error {
  23. args := c.Args()
  24. dirName := "greet"
  25. if len(args) > 0 {
  26. dirName = args.First()
  27. }
  28. abs, err := filepath.Abs(dirName)
  29. if err != nil {
  30. return err
  31. }
  32. err = util.MkdirIfNotExist(abs)
  33. if err != nil {
  34. return err
  35. }
  36. dirName = filepath.Base(filepath.Clean(abs))
  37. filename := dirName + ".api"
  38. apiFilePath := filepath.Join(abs, filename)
  39. fp, err := os.Create(apiFilePath)
  40. if err != nil {
  41. return err
  42. }
  43. defer fp.Close()
  44. t := template.Must(template.New("template").Parse(apiTemplate))
  45. if err := t.Execute(fp, map[string]string{
  46. "name": dirName,
  47. }); err != nil {
  48. return err
  49. }
  50. err = gogen.DoGenProject(apiFilePath, abs, true)
  51. return err
  52. }