package zm_lib import ( "errors" "fmt" "io" "os" "path/filepath" "strings" ) // GetPluginPathByWd 获取项目根目录 通过当前cmd 地址 func GetPluginPathByWd(pluginName string) (string, error) { currentDir, err := os.Getwd() if err != nil { return "", err } // 写入默认数据 pluginSpilt := strings.Split(currentDir, pluginName) if len(pluginSpilt) > 1 { pluginSpilt = pluginSpilt[:len(pluginSpilt)-1] return filepath.Join(strings.Join(pluginSpilt, pluginName), pluginName), nil } return "", errors.New("no find plugin") } func PrintArgsMap(argsMap map[string]any) error { return FprintfArgsMap(1, os.Stdout, argsMap) } func FprintfArgsMap(layer int, out io.Writer, argsMap map[string]any) error { for key, arg := range argsMap { switch value := arg.(type) { case map[string]any: if _, err := fmt.Fprintf(out, "%s%s: \n", strings.Repeat("- ", layer), key); err != nil { return err } if err := FprintfArgsMap(layer+1, out, value); err != nil { return err } case []string: if _, err := fmt.Fprintf(out, "%s%s: [%v]\n", strings.Repeat("- ", layer), key, strings.Join(value, ",")); err != nil { return err } default: if _, err := fmt.Fprintf(out, "%s%s: %v\n", strings.Repeat("- ", layer), key, value); err != nil { return err } } } return nil } // FindPathByWd 返回目录基于执行目录 func FindPathByWd(path string) (string, error) { return FindPathByBasePath(os.Getwd, path) } // FindPathByExecutable 返回目录基于exe路径 func FindPathByExecutable(path string) (string, error) { return FindPathByBasePath(os.Executable, path) } func FindPathByBasePath(basefun func() (basePath string, err error), path string) (string, error) { basePath, err := basefun() if err != nil { return "", err } info, err := os.Stat(basePath) if err != nil { return "", err } if !info.IsDir() { path = filepath.Join(filepath.Dir(basePath), path) } else { path = filepath.Join(basePath, path) } return path, nil }