在源文件 $PWD/dir/src.go 中时,我使用
os.Open("myfile.txt")
它在 $PWD 中查找 myfile.txt (看起来很正常)。
有没有办法告诉 Go 在与 src.go 相同的目录中查找 myfile.txt ?我需要类似__FILE__
Ruby 的东西。
在源文件 $PWD/dir/src.go 中时,我使用
os.Open("myfile.txt")
它在 $PWD 中查找 myfile.txt (看起来很正常)。
有没有办法告诉 Go 在与 src.go 相同的目录中查找 myfile.txt ?我需要类似__FILE__
Ruby 的东西。
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)
}