Files
complie-erlang/parser/zm_lib/public_tools.go
T

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
}