newservice.go 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. @server(
  19. handler: GreetHandler
  20. )
  21. get /greet/from/:name(Request) returns (Response);
  22. }
  23. `
  24. func NewService(c *cli.Context) error {
  25. args := c.Args()
  26. dirName := "greet"
  27. if len(args) > 0 {
  28. dirName = args.First()
  29. }
  30. abs, err := filepath.Abs(dirName)
  31. if err != nil {
  32. return err
  33. }
  34. err = util.MkdirIfNotExist(abs)
  35. if err != nil {
  36. return err
  37. }
  38. dirName = filepath.Base(filepath.Clean(abs))
  39. filename := dirName + ".api"
  40. apiFilePath := filepath.Join(abs, filename)
  41. fp, err := os.Create(apiFilePath)
  42. if err != nil {
  43. return err
  44. }
  45. defer fp.Close()
  46. t := template.Must(template.New("template").Parse(apiTemplate))
  47. if err := t.Execute(fp, map[string]string{
  48. "name": dirName,
  49. }); err != nil {
  50. return err
  51. }
  52. err = gogen.DoGenProject(apiFilePath, abs, true)
  53. return err
  54. }