package pkg import ( "fmt" "os" "path/filepath" ) func GetModuleDir() (string, error) { dir, err := os.Getwd() if err != nil { return "", err } for { modPath := filepath.Join(dir, "go.mod") if _, err := os.Stat(modPath); err == nil { return dir, nil // 找到 go.mod } // 向上查找父目录 parent := filepath.Dir(dir) if parent == dir { break // 到达根目录,未找到 } dir = parent } return "", fmt.Errorf("go.mod not found in current directory or parents") } // GetCacheDir 用于获取缓存目录路径 // 如果缓存目录不存在,则会自动创建 // 返回值: // - string: 缓存目录的路径 // - error: 如果获取模块目录失败或创建缓存目录失败,则返回错误信息 func GetCacheDir() (string, error) { // 获取模块目录 modDir, err := GetModuleDir() if err != nil { return "", err } // 拼接缓存目录路径 path := fmt.Sprintf("%s/cache", modDir) // 创建目录(包括所有必要的父目录),权限设置为0755 err = os.MkdirAll(path, 0755) if err != nil { return "", fmt.Errorf("创建目录失败: %w", err) } // 返回成功创建的缓存目录路径 return path, nil } func GetTmplDir() (string, error) { modDir, err := GetModuleDir() if err != nil { return "", err } path := fmt.Sprintf("%s/tmpl", modDir) err = os.MkdirAll(path, 0755) if err != nil { return "", fmt.Errorf("创建目录失败: %w", err) } return path, nil } func ReverseSliceNew[T any](s []T) []T { result := make([]T, len(s)) for i := 0; i < len(s); i++ { result[i] = s[len(s)-1-i] } return result }