Skip to main content

获取路径

os.Getwd()

获取工作目录, 输出当前的工作目录('一般是项目的根路径') 语法:

wordDir, err := os.Getwd()

例子: 在E:\Web\Golang\src\01\21\server目录运行

wordDir, err := os.Getwd()
fmt.Println("wd", wordDir)
// out: E:\Web\Golang\src\01\21\server

os.Args[0]

获取当前运行环境的可执行文件路径 这个列表里保存的是程序的启动参数,而参数0按照约定是程序的可执行文件名。 语法:

rt  := os.Args[0]

例子: 在E:\Web\Golang\src\01\21\server目录运行main.go文件, air默认把build打包后的可执行文件main.exeE:\Web\Golang\src\01\21/server/tmp目录下

fmt.Println("os", os.Args[0])
// out: E:\Web\Golang\src\01\21\server\tmp\main.exe

runtime.Caller(0)

获取运行时的文件路径 拿到当前正在执行的代码的文件路径,推断出程序的根目录了

例子: 在E:\Web\Golang\src\01\21\server目录运行main.go文件

_, filename, _, _ := runtime.Caller(0)
fmt.Println(filename)
// out: E:/Web/Golang/src/01/21/server/api/auth.go
package utils

import (
"path"
"runtime"
)

func GetPath(args ...any) string {
var dir string
if len(args) < 2 || args[1] == "" {
dir = "/config/"
}
_, filename, _, _ := runtime.Caller(0)
root := path.Dir(path.Dir(filename)) //获取当前工作目录
dirPath := path.Dir(root + dir) // 获取配置文件的目录
filePath := path.Join(dirPath, args[0].(string)) // 获取配置文件
return filePath
}