handler_execute.go 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. package generator_handler
  2. import (
  3. "bytes"
  4. "fmt"
  5. "os"
  6. "os/exec"
  7. "runtime"
  8. "strings"
  9. "github.com/xinliangnote/go-gin-api/internal/pkg/core"
  10. )
  11. type handlerExecuteRequest struct {
  12. Name string `form:"name"`
  13. }
  14. func (h *handler) HandlerExecute() core.HandlerFunc {
  15. dir, _ := os.Getwd()
  16. projectPath := strings.Replace(dir, "\\", "/", -1)
  17. handlergenSh := projectPath + "/scripts/handlergen.sh"
  18. handlergenBat := projectPath + "/scripts/handlergen.bat"
  19. return func(c core.Context) {
  20. req := new(handlerExecuteRequest)
  21. if err := c.ShouldBindPostForm(req); err != nil {
  22. c.Payload("参数传递有误")
  23. return
  24. }
  25. shellPath := fmt.Sprintf("%s %s", handlergenSh, req.Name)
  26. batPath := fmt.Sprintf("%s %s", handlergenBat, req.Name)
  27. command := new(exec.Cmd)
  28. if runtime.GOOS == "windows" {
  29. command = exec.Command("cmd", "/C", batPath)
  30. } else {
  31. // runtime.GOOS = linux or darwin
  32. command = exec.Command("/bin/bash", "-c", shellPath)
  33. }
  34. var stderr bytes.Buffer
  35. command.Stderr = &stderr
  36. output, err := command.Output()
  37. if err != nil {
  38. c.Payload(stderr.String())
  39. return
  40. }
  41. c.Payload(string(output))
  42. }
  43. }