欢迎访问宙启技术站
智能推送

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函数。实际开发中可以根据需要选择合适的方法,方便地实现对程序路径的操作。