genmiddleware.go 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. package gogen
  2. import (
  3. "bytes"
  4. "strings"
  5. "text/template"
  6. "github.com/tal-tech/go-zero/tools/goctl/api/util"
  7. )
  8. var middlewareImplementCode = `
  9. package middleware
  10. import "net/http"
  11. type {{.name}} struct {
  12. }
  13. func New{{.name}}() *{{.name}} {
  14. return &{{.name}}{}
  15. }
  16. func (m *{{.name}})Handle(next http.HandlerFunc) http.HandlerFunc {
  17. return func(w http.ResponseWriter, r *http.Request) {
  18. // TODO generate middleware implement function, delete after code implementation
  19. // Passthrough to next handler if need
  20. next(w, r)
  21. }
  22. }
  23. `
  24. func genMiddleware(dir string, middlewares []string) error {
  25. for _, item := range middlewares {
  26. filename := strings.TrimSuffix(strings.ToLower(item), "middleware") + "middleware" + ".go"
  27. fp, created, err := util.MaybeCreateFile(dir, middlewareDir, filename)
  28. if err != nil {
  29. return err
  30. }
  31. if !created {
  32. return nil
  33. }
  34. defer fp.Close()
  35. name := strings.TrimSuffix(item, "Middleware") + "Middleware"
  36. t := template.Must(template.New("contextTemplate").Parse(middlewareImplementCode))
  37. buffer := new(bytes.Buffer)
  38. err = t.Execute(buffer, map[string]string{
  39. "name": strings.Title(name),
  40. })
  41. if err != nil {
  42. return err
  43. }
  44. formatCode := formatCode(buffer.String())
  45. _, err = fp.WriteString(formatCode)
  46. return err
  47. }
  48. return nil
  49. }