// Package util ... // // Description : util ... // // Author : go_developer@163.com<白茶清欢> // // Date : 2022-10-14 12:39 package util import ( "os" "path/filepath" "runtime" "strings" ) type project struct { } // GetExecutablePath 获取可执行文件的路径 // // Author : go_developer@163.com<白茶清欢> // // Date : 12:41 2022/10/14 func (p *project) GetExecutablePath() (string, error) { dir, err := filepath.Abs(filepath.Dir(os.Args[0])) //返回绝对路径 filepath.Dir(os.Args[0])去除最后一个元素的路径 if err != nil { return "", err } return dir, nil } // GetFileSystemSeparator 获取当前文件系统的路径分隔符 // // Author : go_developer@163.com<白茶清欢> // // Date : 12:51 2022/10/14 func (p *project) GetFileSystemSeparator() string { return string(filepath.Separator) } // BuildPath 构建路径 // // Author : go_developer@163.com<白茶清欢> // // Date : 12:57 2022/10/14 func (p *project) BuildPath(filePathList ...string) string { projectRootPath, _ := p.GetExecutablePath() if len(filePathList) == 0 { // 降为获取项目根目录 return projectRootPath } // 第一个特殊处理 if filePathList[0] == "." || len(filePathList[0]) == 0 { filePathList[0] = projectRootPath } else { if strings.ToLower(runtime.GOOS) == "windows" { // windows if strings.HasPrefix(filePathList[0], "."+p.GetFileSystemSeparator()) { // 相对路径 filePathList[0] = strings.ReplaceAll(filePathList[0], ".", projectRootPath) } else if !strings.Contains(filePathList[0], ":") { // 不包含 :, 是 相对路径,拼成绝对路径 filePathList[0] = projectRootPath + p.GetFileSystemSeparator() + strings.TrimLeft(filePathList[0], p.GetFileSystemSeparator()) } } else { // unix/ linux if strings.HasPrefix(filePathList[0], "."+p.GetFileSystemSeparator()) { filePathList[0] = strings.ReplaceAll(filePathList[0], ".", projectRootPath) } else if !strings.HasPrefix(filePathList[0], p.GetFileSystemSeparator()) { filePathList[0] = projectRootPath + p.GetFileSystemSeparator() + filePathList[0] } } } filePathList[0] = strings.TrimRight(filePathList[0], p.GetFileSystemSeparator()) for idx := 1; idx < len(filePathList); idx++ { filePathList[idx] = strings.Trim(filePathList[idx], p.GetFileSystemSeparator()) } return strings.Join(filePathList, p.GetFileSystemSeparator()) }