83 lines
2.0 KiB
Go
83 lines
2.0 KiB
Go
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
|
|
}
|