在源文件 $PWD/dir/src.go 中使用时,我会使用:
os.Open("myfile.txt")
它在$PWD中寻找myfile.txt(看起来很正常)。
有没有办法告诉Go在与src.go相同的目录中查找myfile.txt?我需要类似于Ruby中的__FILE__
的东西。
os.Open("myfile.txt")
它在$PWD中寻找myfile.txt(看起来很正常)。
有没有办法告诉Go在与src.go相同的目录中查找myfile.txt?我需要类似于Ruby中的__FILE__
的东西。
Go不是一种解释型语言,因此在与源文件相同位置查找文件没有任何意义。Go二进制文件被编译,二进制文件不需要源文件存在即可运行。因此,Go没有类似FILE的函数。runtime.Caller函数返回在编译二进制文件时的文件名。
也许如果我们了解您为什么需要这个功能,我们可以更好地为您提供建议。
使用 osext 包
它提供了函数 ExecutableFolder()
,返回当前运行程序可执行文件所在文件夹的绝对路径(对于 cron 作业非常有用)。它是跨平台的。
package main
import (
"github.com/kardianos/osext"
"fmt"
"log"
)
func main() {
folderPath, err := osext.ExecutableFolder()
if err != nil {
log.Fatal(err)
}
fmt.Println(folderPath)
}
你也可以获取完整的可执行文件路径(类似于__FILE__
):
package main
import (
"github.com/kardianos/osext"
"fmt"
)
func main() {
exeAbsolutePath, _ := osext.Executable()
fmt.Println(exeAbsolutePath)
}