package servicegen import ( "os" "path/filepath" "text/template" ) /* 生成整个项目结构 - hasaki-service-app - hasaki-app - api.go - api_pre.go - api_test.go - api_task.go - db_model.go - handler.go - initialize.go - hasaki-app-options - options.go - hasaki-app-external - external.go */ func Gen(name string) error { err := genService(name) if err != nil { return err } err = genApp(name) if err != nil { return err } err = genOptions(name) if err != nil { return err } err = genExternal(name) if err != nil { return err } return nil } func genService(appName string) error { rootDir, err := getRootDir(appName) if err != nil { return err } err = os.Mkdir(rootDir, os.ModeDir) if err != nil { return err } err = parseTpl(mainTpl, filepath.Join(rootDir, "main.go"), appName) if err != nil { return err } err = parseTpl(configJsonTpl, filepath.Join(rootDir, "config.json"), appName) if err != nil { return err } return nil } func genApp(appName string) error { appDir, err := getAppDir(appName) if err != nil { return err } err = os.Mkdir(appDir, os.ModeDir) if err != nil { return err } // api.go err = parseTpl(apiTpl, filepath.Join(appDir, "api.go"), appName) if err != nil { return err } // api_pre.go err = parseTpl(apiPreTpl, filepath.Join(appDir, "api_pre.go"), appName) if err != nil { return err } // api_task.go err = parseTpl(apiTaskTpl, filepath.Join(appDir, "api_task.go"), appName) if err != nil { return err } // api_test.go err = parseTpl(apiTestTpl, filepath.Join(appDir, "api_test.go"), appName) if err != nil { return err } err = parseTpl(dbModelTpl, filepath.Join(appDir, "db_model.go"), appName) if err != nil { return err } err = parseTpl(initializeTpl, filepath.Join(appDir, "initialize.go"), appName) if err != nil { return err } err = parseTpl(adminInitializeTpl, filepath.Join(appDir, "initialize_amdin.go"), appName) if err != nil { return err } return nil } func genOptions(appName string) error { optionsDir, err := getOptionsDir(appName) if err != nil { return err } err = os.Mkdir(optionsDir, os.ModeDir) if err != nil { return err } err = parseTpl(optionsTpl, filepath.Join(optionsDir, "options.go"), appName) if err != nil { return err } return nil } func genExternal(appName string) error { externalDir, err := getExternal(appName) if err != nil { return err } err = os.Mkdir(externalDir, os.ModeDir) if err != nil { return err } err = parseTpl(externalTpl, filepath.Join(externalDir, "extenral.go"), appName) if err != nil { return err } return nil } func getRootDir(appName string) (string, error) { rootDir := "hasaki-service-" + appName pwd, err := os.Getwd() if err != nil { return "", err } path := filepath.Join(pwd, rootDir) return path, nil } func getAppDir(appName string) (string, error) { appDir := "hasaki_" + appName rootDir, err := getRootDir(appName) if err != nil { return "", err } path := filepath.Join(rootDir, appDir) return path, nil } func getOptionsDir(appName string) (string, error) { optionsDir := "hasaki_" + appName + "_options" rootDir, err := getRootDir(appName) if err != nil { return "", err } path := filepath.Join(rootDir, optionsDir) return path, nil } func getExternal(appName string) (string, error) { externalDir := "hasaki_" + appName + "_external" rootDir, err := getRootDir(appName) if err != nil { return "", err } path := filepath.Join(rootDir, externalDir) return path, nil } func parseTpl(tmpl *template.Template, file string, appName string) error { f, err := os.Create(file) if err != nil { return err } err = tmpl.Execute(f, map[string]interface{}{"app_name": appName}) if err != nil { return err } return nil }