Go 语言在各种运行方式中的相对路径
获取当前可执行文件路径的方法:
package main import ( "log" "os" "os/exec" "path/filepath" "strings" ) // GetAppPath 获取运行时的相对目录 func GetAppPath() string { file, _ := exec.LookPath(os.Args[0]) path, _ := filepath.Abs(file) index := strings.LastIndex(path, string(os.PathSeparator)) return path[:index] }
测试
func main() { log.Println(GetAppPath()) // go run path.go C:\Users\centphp\AppData\Local\Temp\go-build1787754725\b001\exe log.Println(GetAppPath()) // GoLand 运行 C:\Users\centphp\AppData\Local\Temp\GoLand log.Println(GetAppPath()) // path.exe运行 D:\go\src }
go ru 和 go build 不一样,一个到临时目录下执行,一个可手动在编译后的目录下执行,路径的处理方式会不同。根本原因了,因为 go run
和 go build
的编译文件执行路径并不同,执行的层级也有可能不一样。