diff --git a/Makefile b/Makefile new file mode 100644 index 0000000..7ff66cc --- /dev/null +++ b/Makefile @@ -0,0 +1,9 @@ +setup: + go run . setup +ent: + go generate ./internal/ent +grpc-web: + grpcwebproxy --backend_addr=localhost:8081 --run_http_server --run_tls_server=false --server_http_debug_port 18081 --allow_all_origins --server_bind_address 127.0.0.1 +install-deps: + go install github.com/swaggo/swag/cmd/swag@latest + go install -tags 'postgres' github.com/golang-migrate/migrate/v4/cmd/migrate@latest \ No newline at end of file diff --git a/README.md b/README.md index bac6b63..a16f267 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # 使用步骤 1. 修改 go.mod 中的模块名字 -2. 运行 go run setup.go 初始化项目 +2. 运行 go run . setup 初始化项目 3. 到 providers,cmd/migrate.go 中初始化 ent \ No newline at end of file diff --git a/main.go b/main.go index fc75a66..0c83a36 100644 --- a/main.go +++ b/main.go @@ -1,7 +1,124 @@ package main -import "framework_v2/internal/cmd" +import ( + "bufio" + "flag" + "fmt" + "framework_v2/internal/cmd" + "io/fs" + "os" + "os/exec" + "path/filepath" + "strings" +) func main() { + flag.Parse() + + if len(os.Args) == 2 && os.Args[1] == "setup" { + setup() + return + } + cmd.Execute() } + +func setup() { + fmt.Println("Do you want to setup the project? (y/n)") + var answer string + _, err := fmt.Scanln(&answer) + if err != nil { + fmt.Printf("Error reading user input: %v\n", err) + return + } + if answer != "y" { + return + } + + // 读取 go.mod 中的 module 名称 + modName, err := getModuleName("go.mod") + if err != nil { + fmt.Printf("Error reading go.mod: %v\n", err) + return + } + fmt.Printf("Module name found: %s\n", modName) + + // 遍历当前文件夹(排除 vendor、setup.go 和版本控制文件夹) + err = filepath.Walk(".", func(path string, info fs.FileInfo, err error) error { + if err != nil { + return err + } + + // 条件排除 + if info.IsDir() && (info.Name() == "vendor" || info.Name() == ".git") { + return filepath.SkipDir + } + if !info.IsDir() && info.Name() == "setup.go" { + return nil + } + + // 处理文件 + if !info.IsDir() { + err := replaceInFile(path, `"framework_v2`, fmt.Sprintf(`"%s`, modName)) + if err != nil { + fmt.Printf("Error replacing in file %s: %v\n", path, err) + } + } + + return nil + }) + if err != nil { + fmt.Printf("Error walking the path: %v\n", err) + } + + // run go mod tidy + fmt.Println("Running go mod tidy...") + var cmd = exec.Command("go", "mod", "tidy") + if err := cmd.Run(); err != nil { + fmt.Printf("Error running go mod tidy: %v\n", err) + } + +} + +// 读取 go.mod 文件中的 module 名称 +func getModuleName(modFilePath string) (string, error) { + file, err := os.Open(modFilePath) + if err != nil { + return "", err + } + defer func(file *os.File) { + err := file.Close() + if err != nil { + fmt.Printf("Error closing file: %v\n", err) + } + }(file) + + scanner := bufio.NewScanner(file) + for scanner.Scan() { + line := scanner.Text() + if strings.HasPrefix(line, "module ") { + return strings.TrimSpace(strings.TrimPrefix(line, "module ")), nil + } + } + + if err := scanner.Err(); err != nil { + return "", err + } + + return "", fmt.Errorf("module name not found in go.mod") +} + +// 在文件中替换指定的字符串 +func replaceInFile(filePath string, old string, new string) error { + input, err := os.ReadFile(filePath) + if err != nil { + return err + } + + output := strings.ReplaceAll(string(input), old, new) + if err = os.WriteFile(filePath, []byte(output), 0666); err != nil { + return err + } + + return nil +} diff --git a/setup.go b/setup.go deleted file mode 100644 index 32e982d..0000000 --- a/setup.go +++ /dev/null @@ -1,100 +0,0 @@ -package main - -import ( - "bufio" - "fmt" - "io/fs" - "os" - "os/exec" - "path/filepath" - "strings" -) - -func main() { - // 读取 go.mod 中的 module 名称 - modName, err := getModuleName("go.mod") - if err != nil { - fmt.Printf("Error reading go.mod: %v\n", err) - return - } - fmt.Printf("Module name found: %s\n", modName) - - // 遍历当前文件夹(排除 vendor、setup.go 和版本控制文件夹) - err = filepath.Walk(".", func(path string, info fs.FileInfo, err error) error { - if err != nil { - return err - } - - // 条件排除 - if info.IsDir() && (info.Name() == "vendor" || info.Name() == ".git") { - return filepath.SkipDir - } - if !info.IsDir() && info.Name() == "setup.go" { - return nil - } - - // 处理文件 - if !info.IsDir() { - err := replaceInFile(path, `"framework_v2`, fmt.Sprintf(`"%s`, modName)) - if err != nil { - fmt.Printf("Error replacing in file %s: %v\n", path, err) - } - } - - return nil - }) - if err != nil { - fmt.Printf("Error walking the path: %v\n", err) - } - - // run go mod tidy - fmt.Println("Running go mod tidy...") - var cmd = exec.Command("go", "mod", "tidy") - if err := cmd.Run(); err != nil { - fmt.Printf("Error running go mod tidy: %v\n", err) - } - -} - -// 读取 go.mod 文件中的 module 名称 -func getModuleName(modFilePath string) (string, error) { - file, err := os.Open(modFilePath) - if err != nil { - return "", err - } - defer func(file *os.File) { - err := file.Close() - if err != nil { - fmt.Printf("Error closing file: %v\n", err) - } - }(file) - - scanner := bufio.NewScanner(file) - for scanner.Scan() { - line := scanner.Text() - if strings.HasPrefix(line, "module ") { - return strings.TrimSpace(strings.TrimPrefix(line, "module ")), nil - } - } - - if err := scanner.Err(); err != nil { - return "", err - } - - return "", fmt.Errorf("module name not found in go.mod") -} - -// 在文件中替换指定的字符串 -func replaceInFile(filePath string, old string, new string) error { - input, err := os.ReadFile(filePath) - if err != nil { - return err - } - - output := strings.ReplaceAll(string(input), old, new) - if err = os.WriteFile(filePath, []byte(output), 0666); err != nil { - return err - } - - return nil -}