genmain.go 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. package gogen
  2. import (
  3. "fmt"
  4. "strings"
  5. "github.com/tal-tech/go-zero/tools/goctl/api/spec"
  6. "github.com/tal-tech/go-zero/tools/goctl/config"
  7. "github.com/tal-tech/go-zero/tools/goctl/util/format"
  8. "github.com/tal-tech/go-zero/tools/goctl/util/pathx"
  9. "github.com/tal-tech/go-zero/tools/goctl/vars"
  10. )
  11. const mainTemplate = `package main
  12. import (
  13. "flag"
  14. "fmt"
  15. {{.importPackages}}
  16. )
  17. var configFile = flag.String("f", "etc/{{.serviceName}}.yaml", "the config file")
  18. func main() {
  19. flag.Parse()
  20. var c config.Config
  21. conf.MustLoad(*configFile, &c)
  22. ctx := svc.NewServiceContext(c)
  23. server := rest.MustNewServer(c.RestConf)
  24. defer server.Stop()
  25. handler.RegisterHandlers(server, ctx)
  26. fmt.Printf("Starting server at %s:%d...\n", c.Host, c.Port)
  27. server.Start()
  28. }
  29. `
  30. func genMain(dir, rootPkg string, cfg *config.Config, api *spec.ApiSpec) error {
  31. name := strings.ToLower(api.Service.Name)
  32. filename, err := format.FileNamingFormat(cfg.NamingFormat, name)
  33. if err != nil {
  34. return err
  35. }
  36. configName := filename
  37. if strings.HasSuffix(filename, "-api") {
  38. filename = strings.ReplaceAll(filename, "-api", "")
  39. }
  40. return genFile(fileGenConfig{
  41. dir: dir,
  42. subdir: "",
  43. filename: filename + ".go",
  44. templateName: "mainTemplate",
  45. category: category,
  46. templateFile: mainTemplateFile,
  47. builtinTemplate: mainTemplate,
  48. data: map[string]string{
  49. "importPackages": genMainImports(rootPkg),
  50. "serviceName": configName,
  51. },
  52. })
  53. }
  54. func genMainImports(parentPkg string) string {
  55. var imports []string
  56. imports = append(imports, fmt.Sprintf("\"%s\"", pathx.JoinPackages(parentPkg, configDir)))
  57. imports = append(imports, fmt.Sprintf("\"%s\"", pathx.JoinPackages(parentPkg, handlerDir)))
  58. imports = append(imports, fmt.Sprintf("\"%s\"\n", pathx.JoinPackages(parentPkg, contextDir)))
  59. imports = append(imports, fmt.Sprintf("\"%s/core/conf\"", vars.ProjectOpenSourceURL))
  60. imports = append(imports, fmt.Sprintf("\"%s/rest\"", vars.ProjectOpenSourceURL))
  61. return strings.Join(imports, "\n\t")
  62. }