golang 获取当前执行程序路径的操作
发布时间:2023-05-14 20:10:26
在Go语言中,获取当前执行程序路径是一个比较常见的操作,可以用于程序自身路径的查找、文件操作、配置文件读取等功能。本文将介绍在Go语言中如何获取当前执行程序的路径。
1. 使用os包中的Args变量
os包是常用的系统级别的包,其中有个Args变量存储了所有参数,包括命令本身和参数。可以通过os.Args[0]获取当前执行程序的路径。
示例代码如下:
package main
import (
"fmt"
"os"
)
func main() {
fmt.Println(os.Args[0])
}
2. 使用os包中的Getwd函数
os包中的Getwd函数用于获取当前工作目录路径,可以通过Getwd函数获取执行程序的绝对路径,并进行拼接得到当前执行程序的路径。
示例代码如下:
package main
import (
"fmt"
"os"
)
func main() {
wd, err := os.Getwd()
if err != nil {
fmt.Println(err)
return
}
fmt.Println(wd + "/" + os.Args[0])
}
3. 使用os包中的Executable函数
os包中的Executable函数用于获取当前执行的可执行文件的路径,这是最常用的方法之一。
示例代码如下:
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
ex, err := os.Executable()
if err != nil {
panic(err)
}
exPath := filepath.Dir(ex)
fmt.Println(exPath)
}
需要注意的是,Executable返回的路径并不一定是程序所在的目录,因为可执行文件在其他位置被软链接的话,Executable函数返回的是软链接的位置。
需要使用filepath.Dir函数获取可执行文件所在的目录。
4. 使用os包中的Getegid函数
os包中的Getegid函数返回当前进程的有效的用户组ID,使用此函数可以获取当前执行程序的路径。
示例代码如下:
package main
import (
"fmt"
"os"
"path/filepath"
)
func main() {
pid := os.Getpid()
pwd, err := os.Getwd()
if err != nil {
fmt.Println(err)
return
}
path := fmt.Sprintf("/proc/%d/exe", pid)
link, err := os.Readlink(path)
if err != nil {
fmt.Println(err)
return
}
fmt.Println(filepath.Dir(link))
fmt.Println(pwd)
}
需要注意的是,此方法依赖于Linux系统,因为Windows系统没有/proc这个目录。
总结
本文介绍了四种获取当前执行程序路径的方法,包括使用os.Args变量、os.Getwd函数、os.Executable函数和os.Getegid函数。实际开发中可以根据需要选择合适的方法,方便地实现对程序路径的操作。
